JavaSQL查询-Hibernate
所以我得到了一个查询,从中生成了列表,然后将该列表传递给另一个应该打印它的方法JavaSQL查询-Hibernate,java,hibernate,hql,Java,Hibernate,Hql,所以我得到了一个查询,从中生成了列表,然后将该列表传递给另一个应该打印它的方法 Query query = session.createQuery("from Osoba as o FETCH ALL PROPERTIES WHERE ((o.id) = (id_osoby)) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (L
Query query = session.createQuery("from Osoba as o FETCH ALL PROPERTIES WHERE ((o.id) = (id_osoby)) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?)");
// Query query = session.createQuery("from Osoba WHERE (LOWER(zainteresowania) LIKE ?)"); // Stara, zachowana tymczasowo
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);
session.getTransaction().commit();
session.close();
}
扎瓦尼亚班:
private int id;
private String zainteresowanie;
public Zainteresowania(){ // domyslny
}
public Zainteresowania(String zainteresowanie){
this.zainteresowanie = zainteresowanie;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getZainteresowanie() {
return zainteresowanie;
}
public void setZainteresowanie(String zainteresowanie) {
this.zainteresowanie = zainteresowanie;
}
好的,当我尝试执行这个搜索查询并传递参数时,我得到一个错误:
ERROR: Invalid path: 'null.zainteresowanie'
kwi 22, 2015 3:05:00 PM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: Invalid path: 'null.zainteresowanie'
Invalid path: 'null.zainteresowanie'
Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'null.zainteresowanie' [from com.mycompany.kwestionariusz.Osoba as o FETCH ALL PROPERTIES WHERE ((o.id) = (id_osoby)) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?)]
当我将查询更改为此:
Query query = session.createQuery("from Osoba as 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 ?)");
我得到一个错误:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.mycompany.kwestionariusz.Osoba
at com.mycompany.kwestionariusz.Osoba.wyswietlWybrane(Osoba.java:226)
at com.mycompany.kwestionariusz.Osoba.wyszukajOsoby(Osoba.java:218)
at com.mycompany.kwestionariusz.main.main(main.java:42)
第226行(其wyswietlWybrane方法,张贴在那里)
第218行(搜索方法的一部分):
我真的需要帮助,尝试了很多方法,但似乎没有任何效果
我认为原因是搜索查询正在创建Osoba列表以外的其他列表-但我需要将Osoba ID与Zainterestowania ID_Osoby进行比较,因此,如何做到这一点,并且仍然能够将我的结果列表传递给我的wyswietlWybrane方法?遇到此问题的原因是,在查询的FROM部分指定了两个Hibernate实体,并且默认情况下,由于没有指定SELECT,所以会选择这两个表的每一列 这将返回实体属性的对象[],这就是您获得强制转换异常的原因 要修复此问题,请尝试显式选择所需的o实体的每个命名属性,并且它应该足够智能,可以正确映射到o实体,而不是对象[] 我还注意到,您实际上并没有将两个表连接在一起。我相信这会给你一个笛卡尔积。要修复此问题,请向筛选器添加联接:
... from Osoba as o INNER JOIN o.zainteresowania as z FETCH ALL ...
这会将z实体限制为在o中作为子实体存在的实体
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 ?)");
这就是解决方案,还有一些其他问题,但至少列出了人员名单这是太多的代码,无法消化。请只发布导致错误的相关代码。若需要,那个么只发布你们的全部代码。我现在尝试了这种方式,遗憾的是错误仍然在这里,另一个<代码>线程“main”java.lang.IllegalArgumentException中的异常:要遍历的节点不能为null代码>查询:
query query=session.createQuery(“o.id,o.imie,o.nazwisko,o.telefon,o.email,o.uczelnia,o.doswiadczenie,o.skadslyszal from Osoba as o AND o.zainterestowania=z获取所有属性,其中((o.id)=(id_osoby))和(较低的(z.zainterestowanie)LIKE?)和(较低的(z.zainterestowanie)LIKE?)和(较低的(z.zainterestowanie)LIKE?)和(较低的(z.zainterestowanie)LIKE?)
kwi 22,2015 3:30:20 PM org.hibernate.hql.internal.ast.ErrorCounter reportError错误:第1行:意外标记:o kwi 22,2015 3:30:20 PM org.hibernate.hql.internal.ast.ErrorCounter reportError错误:第1行:意外标记:o
@arienn抱歉,我说得很糟糕。请看我的编辑。您需要内部连接o.zaiInterestowania,因为zQuery现在看起来是这样的:Query Query=session.createQuery(“选择o.id、o.imie、o.nazzwisko、o.telefon、o.email、o.uczelnia、o.doswiadczenie、o.skadSlyszal从Osoba作为o内部连接o.zainterestowania作为z获取所有属性,其中((o.id)=(id_osoby))和(LOWER(z.zainterestowanie)like?)和(低(z.Zainterestowanie)LIKE?)和(低(z.Zainterestowanie)LIKE?)和(低(z.Zainterestowanie)LIKE?)和(低(z.Zainterestowanie)LIKE?)代码>但我回到了原来的位置<代码>线程“main”java.lang.ClassCastException中的异常:[Ljava.lang.Object;不能在com.mycompany.kwestionariusz.osoban.wyswietlWybrane(Osoba.java:226)的com.mycompany.kwestionariusz.Osoba.wyszukajosby(Osoba.java:218)的com.mycompany.kwestionariusz.main.main(main.java:42)上强制转换为com.mycompany.kwestionariusz.kwestionariusz.kosz
ERROR: Invalid path: 'null.zainteresowanie'
kwi 22, 2015 3:05:00 PM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: Invalid path: 'null.zainteresowanie'
Invalid path: 'null.zainteresowanie'
Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'null.zainteresowanie' [from com.mycompany.kwestionariusz.Osoba as o FETCH ALL PROPERTIES WHERE ((o.id) = (id_osoby)) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?) and (LOWER(Zainteresowania.zainteresowanie) LIKE ?)]
Query query = session.createQuery("from Osoba as 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 ?)");
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.mycompany.kwestionariusz.Osoba
at com.mycompany.kwestionariusz.Osoba.wyswietlWybrane(Osoba.java:226)
at com.mycompany.kwestionariusz.Osoba.wyszukajOsoby(Osoba.java:218)
at com.mycompany.kwestionariusz.main.main(main.java:42)
for (Osoba a : osoby) {List zainteresowania1 = a.getZainteresowania();
wyswietlWybrane(osoby);
... from Osoba as o INNER JOIN o.zainteresowania as z FETCH ALL ...
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 ?)");