Hibernate搜索查询 [英] Hibernate Search Query

查看:88
本文介绍了Hibernate搜索查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我需要根据自己的兴趣来搜索查询。

$ b $我有2列,其中一列包含人物, b

(如果您需要一些信息,但我没有在这里提供,我可能在这里提供: Java的SQL查询 - 休眠



在这一刻,我正在尝试这样做:

  Query query = session.createQuery(SELECT new com.mycompany.kwestionariusz.Osoba(o.id,o.imie,o.nazwisko,o.telefon, o.mail,o.uczelnia,o.doswiadczenie,o.skadSlyszal)从Osoba as o INNER JOIN o.zainteresowania as z FETCH ALL PROPERTIES WHERE((o.id)=(id_osoby))and(LOWER(z.zainteresowanie) )和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)); 
// Query query2 = session.createQuery(SELECT new com.mycompany.kwestionariusz.Osoba(o.id,o.imie,o.nazwisko,o.telefon,o.email,o.uczelnia,o。 ((o.id)=(id_osoby))和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie))中的所有属性(从Osoba获得的内部连接o.zainteresowania) )和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?));
query.setString(0,%+ input1 +%);
query.setString(1,%+ input2 +%);
query.setString(2,%+ input3 +%);
query.setString(3,%+ input4 +%);
query.setString(4,%+ input5 +%);

列表< Osoba> osoby = query.list(); // robimy sobie听na podst zapytania
wyswietlWybrane(osoby);

wyswietlWybrane方法:

  private void wyswietlWybrane(List< Osoba> osoby){

for(Osoba a:osoby){
List zainteresowania1 = a.getZainteresowania();
System.out.println(\\\
\\\
+ a.getId()+。+ a.getImie()++ a.getNazwisko()+\\\
Telefon: + a.getTelefon()+\\\
Email:+ a.getEmail()+\\\
Uczelnia:+ a.getUczelnia()+\\\
Doswiadczenie:+ a.getDoswiadczenie()+\t \\\
+Skad slyszal:+ a.getSkadSlyszal());
System.out.print(Obszary zainteresowan:);
for(Iterator iterator2 = zainteresowania1.iterator(); iterator2.hasNext();){
Zainteresowania nazwa =(Zainteresowania)iterator2.next();
System.out.print(nazwa.getZainteresowanie()+。);
}
}
}

ShowAll方法:

  public void wyswietlWszystkie()
{
try
{
Session session = HibernateUtil。 。了getSessionFactory()的openSession();
session.beginTransaction();
列表< Osoba> osoby = session.createQuery(from Osoba)。list(); // tworzymy sobie liste z zapytania do bazy ktora wyswietli nam wszystkich

wyswietlWybrane(osoby); // przekazujym ta liste do innej i wyswietlamy

session.getTransaction()。commit();
session.close();

catch(HibernateException e)
{
HibernateUtil.getSessionFactory()。close(); //销毁此SessionFactory并释放所有资源(缓存,连接池等)。
}
}

我现在使用的查询存在一些问题。 / p>

首先。
当我使用WyswietlWszystkie方法时,我得到如下输出:

  1。 Krystian示例
电话:900900900
电子邮件:example@example.com
Uczelnia:示例学校
Doswiadczenie:示例体验
Skad slyszal:朋友
Obszary zainteresowan :Java。 Android系统。技术WWW(HTML,CSS,JavaScript)。 Projektowanie aplikacji。

但是当我使用我的搜索方法和传递列表到wyswietlWybrane(在wyswietlWszystkie即时通讯列表中

我得到如下输出:(它搜索:Java):

  1。 Krystian示例
电话:900900900
电子邮件:example@example.com
Uczelnia:示例学校
Doswiadczenie:示例体验
Skad slyszal:朋友
Obszary zainteresowan :

1. Krystian示例
电话:900900900
电子邮件:example@example.com
Uczelnia:示例学校
Doswiadczenie:示例经验
Skad slyszal:Friends
Obszary zainteresowan:

你可以看到它翻了一番,我不能看到obszary zaintereson。

现在搜索:Java和Android没有给出任何结果(它应该因为这个人有两个)。 b

用于Technologie WWW和Java:

  1。 Krystian示例
电话:900900900
电子邮件:example@example.com
Uczelnia:示例学校
Doswiadczenie:示例体验
Skad slyszal:朋友
Obszary zainteresowan :

所有的类都已经包含在我的帖子开头的链接中。 / p>




我该如何做搜索查询?它是如此疯狂的行为?

b $ bjoin o.zainteresowania z+
其中z.zainteresowanie在(:tags)+
group by o+
有count(z)=:tag_count ;

这解决了我的问题。


I have 2 columns, one contains people, second contains their intrests.

I need do to search query based on their interests.

(If you need some information and I didn't give it here, I probably gave it here: Java SQL Query - Hibernate)

At this moment I am trying to do this like that:

Query query = session.createQuery("SELECT new com.mycompany.kwestionariusz.Osoba(o.id, o.imie, o.nazwisko, o.telefon, o.email, o.uczelnia, o.doswiadczenie, o.skadSlyszal) from Osoba as o INNER JOIN o.zainteresowania as z FETCH ALL PROPERTIES WHERE ((o.id) = (id_osoby)) and (LOWER(z.zainteresowanie) LIKE ?) and (LOWER(z.zainteresowanie) LIKE ?) and (LOWER(z.zainteresowanie) LIKE ?) and (LOWER(z.zainteresowanie) LIKE ?) and (LOWER(z.zainteresowanie) LIKE ?)");   
        //Query query2 = session.createQuery("SELECT new com.mycompany.kwestionariusz.Osoba(o.id, o.imie, o.nazwisko, o.telefon, o.email, o.uczelnia, o.doswiadczenie, o.skadSlyszal) from Osoba as o INNER JOIN o.zainteresowania as z FETCH ALL PROPERTIES WHERE ((o.id) = (id_osoby)) and (LOWER(z.zainteresowanie) LIKE ?) and (LOWER(z.zainteresowanie) LIKE ?) and (LOWER(z.zainteresowanie) LIKE ?) and (LOWER(z.zainteresowanie) LIKE ?) and (LOWER(z.zainteresowanie) LIKE ?)");      
        query.setString(0,"%"+input1+"%");
        query.setString(1,"%"+input2+"%");
        query.setString(2,"%"+input3+"%");
        query.setString(3,"%"+input4+"%");
        query.setString(4,"%"+input5+"%");      

        List<Osoba> osoby = query.list(); // robimy sobie liste na podst zapytania
        wyswietlWybrane(osoby);

wyswietlWybrane method:

 private void wyswietlWybrane(List<Osoba> osoby) {

        for (Osoba a : osoby) {
            List zainteresowania1 = a.getZainteresowania();        
            System.out.println("\n\n" + a.getId() +". " + a.getImie() + " " + a.getNazwisko() + "\nTelefon: " + a.getTelefon() + "\nEmail: " + a.getEmail() + "\nUczelnia: " + a.getUczelnia() + "\nDoswiadczenie: " + a.getDoswiadczenie() + "\t\n" + "Skad slyszal: " + a.getSkadSlyszal());
            System.out.print("Obszary zainteresowan: ");
            for (Iterator iterator2 = zainteresowania1.iterator(); iterator2.hasNext();){
                Zainteresowania nazwa = (Zainteresowania) iterator2.next();
                System.out.print(nazwa.getZainteresowanie() + ".  "); 
            }
        } 
    }

ShowAll Method:

public void wyswietlWszystkie()
        {             
            try
            {        
                Session session = HibernateUtil.getSessionFactory().openSession();
                session.beginTransaction();
                List<Osoba> osoby = session.createQuery("from Osoba").list(); // tworzymy sobie liste z zapytania do bazy ktora wyswietli nam wszystkich

                wyswietlWybrane(osoby); // przekazujym ta liste do innej i wyswietlamy

                session.getTransaction().commit();
                session.close();
            }
            catch (HibernateException e) 
            {       
                HibernateUtil.getSessionFactory().close();  //Destroy this SessionFactory and release all resources (caches, connection pools, etc). 
            }
        }

There are some issues with query I use now.

First. When I use WyswietlWszystkie method then I got output like that:

1. Krystian Example
Telefon: 900900900
Email: example@example.com
Uczelnia: Example School
Doswiadczenie: Example experience   
Skad slyszal: Friends
Obszary zainteresowan: Java.  Android.  Technologie WWW (HTML, CSS, JavaScript).  Projektowanie aplikacji.

but when I use my search method and pass list to wyswietlWybrane (in wyswietlWszystkie im passing list to that method too).

I got output like this: (its search for: Java):

1. Krystian Example
Telefon: 900900900
Email: example@example.com
Uczelnia: Example School
Doswiadczenie: Example experience   
Skad slyszal: Friends
Obszary zainteresowan: 

1. Krystian Example
Telefon: 900900900
Email: example@example.com
Uczelnia: Example School
Doswiadczenie: Example experience   
Skad slyszal: Friends
Obszary zainteresowan: 

as you can see its doubled and I cant see "obszary zaintereson".

now search for: Java and Android gaves no results (it should cuz this person has both of them).

for Technologie WWW and Java:

1. Krystian Example
Telefon: 900900900
Email: example@example.com
Uczelnia: Example School
Doswiadczenie: Example experience   
Skad slyszal: Friends
Obszary zainteresowan: 

all classes etc are already included in thread that I gave link at the beginning of my post.

How can I do search query? What it is acting so crazy?

解决方案

"select o from Osoba o " +
"join o.zainteresowania z " +
"where z.zainteresowanie in (:tags) " +
 "group by o " +
 "having count(z)=:tag_count";

This solved my problems.

这篇关于Hibernate搜索查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆