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

问题描述

 查询

查询我从列表中获取列表,然后将该列表传递给另一个应打印的列表。 ((o.id)=(id_osoby))和(LOWER(Zainteresowania.zainteresowanie)LIKE?)和(LOWER(Zainteresowania.zainteresowanie)LIKE?)和( LOWER(Zainteresowania.zainteresowanie)LIKE?)和(LOWER(Zainteresowania.zainteresowanie)LIKE?)和(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 +%);

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

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

当我想打印所有我只用:

  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

打印我传递的内容的方法:

$ (Osoba> osoby){b





私人无效wyswietlWybrane(列表< Osoba> osoby) :osoby){
List zainteresowania1 = a.getZainteresowania();
System.out.println(a.getId()+。+ a.getImie()++ a.getNazwisko()+\\\
Telefon:+ a.getTelefon()+\\ \\ nEmail:+ a.getEmail()+\\\
Uczelnia:+ a.getUczelnia()+\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()+。);



地图文件:



Osoba

 <?xml version =1.0?> 
<!DOCTYPE hibernate-mapping PUBLIC
- // Hibernate / Hibernate映射DTD 3.0 // EN
http://www.hibernate.org/dtd/hibernate-mapping -3.0.dtd>


< class name =Osobatable =DANEOSOBOWE>

< id name =idcolumn =IDtype =integer>
< generator class =native/>
< / id>

< property name =imiecolumn =Imie/>



< property name =emailcolumn =Email/>



< list name =zainteresowaniacascade =all>
< key column =id_osoby/>
< list-index column =idx/>
<一对多课程=Zainteresowania/>
< / list>

< property name =skadSlyszalcolumn =SkadSlyszal/>

< / class>

< / hibernate-mapping>

Zainteresowania:

 <?xml version =1.0encoding =UTF-8?> 
<!DOCTYPE hibernate-mapping PUBLIC - // Hibernate / Hibernate Mapping DTD 3.0 // ENhttp://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">
< hibernate-mapping package =com.mycompany.kwestionariusz>

< class name =Zainteresowaniatable =ZAINTERESOWANIA>
< id name =idtype =intcolumn =id>
< generator class =native/>
< / id>
< property name =zainteresowaniecolumn =zainteresowanietype =string/>
< / class>

< / hibernate-mapping>

Osoba class:

  private int id; 
private String imie;
私人字符串nazwisko;
私人字符串电子邮件;
私人字符串电话;
私人字符串uczelnia;
私人字符串doswiadczenie;
私人字符串skadSlyszal;
私人名单zainteresowania;

public Osoba(){// domyslny
}

// konstruktor zeby mozna bylo sobie w jednej linijce dodawac osobe
public Osoba(String imie1 ,String nazwisko1,String telefon1,String email1,String uczelnia1,String doswiadczenie1,String skadSlyszal1){
this.imie = imie1;
this.nazwisko = nazwisko1;
this.email = email1;
this.telefon = telefon1;
this.uczelnia = uczelnia1;
this.doswiadczenie = doswiadczenie1;
this.skadSlyszal = skadSlyszal1;
}
// kontr przyj caly obiekt
public Osoba(Osoba tymczasowa){
this.imie = tymczasowa.imie;
this.nazwisko = tymczasowa.nazwisko;
this.email = tymczasowa.email;
this.telefon = tymczasowa.telefon;
this.uczelnia = tymczasowa.uczelnia;
this.doswiadczenie = tymczasowa.doswiadczenie;
this.skadSlyszal = tymczasowa.skadSlyszal;
}
// gettery,settery
public int getId(){
return id;
}

public String getImie(){
return imie;
}

public String getNazwisko(){
return nazwisko;
}

public String getEmail(){
return email;
}

public String getTelefon(){
return telefon;
}

public String getUczelnia(){
return uczelnia;
}

public String getDoswiadczenie(){
return doswiadczenie;
}

public List getZainteresowania(){
return zainteresowania;
}

public String getSkadSlyszal(){
return skadSlyszal;
}

public void setImie(String string){
this.imie = string;
}

public void setId(int in){
this.id = in;
}

public void setNazwisko(String string){
this.nazwisko = string;
}

public void setEmail(String string){
this.email = string;
}

public void setTelefon(String string){
this.telefon = string;
}

public void setUczelnia(String string){
this.uczelnia = string;
}

public void setDoswiadczenie(String string){
this.doswiadczenie = string;
}

public void setZainteresowania(List string){
this.zainteresowania = string;
}

public void setSkadSlyszal(String string){
this.skadSlyszal = string;

$ / code>

Zainteresowania class:

  private int id; 
私人字符串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;
}

好的,当我尝试执行此查询时,我通过参数I出现错误:

 错误:路径无效:'null.zainteresowanie'
kwi 22,2015 3:05 :00 PM org.hibernate.hql.internal.ast.ErrorCounter reportError
错误:无效路径:'null.zainteresowanie'
路径无效:'null.zainteresowanie'
线程中的异常main org.hibernate.hql.internal.ast.QuerySyntaxException:无效的路径:'null.zainteresowanie'[from com.mycompany.kwestionariusz.Osoba as o FETCH ALL PROPERTIES WHERE((o.id)=(id_osoby))and(LOWER (Zainteresowania.zainteresowanie)LIKE?)和(LOWER(Zainteresowania.zainteresowanie)LIKE?)和(LOWER(Zainteresowania.zainteresowanie)LIKE?)和(LOWER(Zainteresowania.zainteresowanie)LIKE?)和(LOWER(Zainteresowania.zainteresowanie)LIKE当我将查询改为这个时:






b

 查询查询= session.createQu ((o.id)=(id_osoby))和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)和( LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)); 

我遇到错误:

 线程main中的异常java.lang.ClassCastException:[Ljava.lang.Object;无法转换为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方法,张贴在那里)

  for(Osoba a:osoby){List zainteresowania1 = a .getZainteresowania(); 





  wyswietlWybrane(osoby); 

我真的需要帮助,尝试了很多方法,没有任何效果。



我相信原因是搜索查询正在创建其他列表而不是Osoba列表 - 但我需要将Osoba ID与Zainteresowania ID_Osoby进行比较,所以如何执行此操作并仍然能够通过我的结果列表到我的wyswietlWybrane方法?

解决方案

  Query query = session.createQuery(从Osoba选择新的com.mycompany.kwestionariusz.Osoba(o.id,o.imie,o.nazwisko,o.telefon,o.email,o.uczelnia,o.doswiadczenie,o.skadSlyszal)作为o INNER JOIN o。 zainteresowania as z FETCH ALL PROPERTIES WHERE((o.id)=(id_osoby))和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE? )和(LOWER(z.zainteresowanie)LIKE?)和(LOWER(z.zainteresowanie)LIKE?)); 

这就是解决方案,还有其他一些问题,但至少人们的名单正在制作中


So I got query that I made list from and then pass that list to another method that should print it.

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();
    }

for eg. when I want to print all I just use:

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

method that prints what I pass:

private void wyswietlWybrane(List<Osoba> osoby) {



    for (Osoba a : osoby) {
List zainteresowania1 = a.getZainteresowania();
        System.out.println(a.getId() +". " + a.getImie() + " " + a.getNazwisko() + "\nTelefon: " + a.getTelefon() + "\nEmail: " + a.getEmail() + "\nUczelnia: " + a.getUczelnia() + "\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() + ".  ");
        }
    }
    }

map files:

Osoba

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.mycompany.kwestionariusz">

    <class name="Osoba" table="DANEOSOBOWE">

        <id name="id" column="ID" type="integer">
            <generator class="native"/>
        </id>

        <property name="imie" column="Imie"/>

        <property name="nazwisko" column="Nazwisko"/>

        <property name="telefon" column="Telefon"/>

                <property name="email" column="Email" />

                <property name="uczelnia" column="Uczelnia" />

                <property name="doswiadczenie" column="Doswiadczenie" />

                <list name="zainteresowania" cascade="all">
                <key column="id_osoby"/>
                <list-index column="idx"/>
                <one-to-many class="Zainteresowania"/>
                </list>

                <property name="skadSlyszal" column="SkadSlyszal" />

    </class>

</hibernate-mapping>

Zainteresowania:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.mycompany.kwestionariusz">

   <class name="Zainteresowania" table="ZAINTERESOWANIA">
                <id name="id" type="int" column="id">
                <generator class="native"/>
                </id>
                <property name="zainteresowanie" column="zainteresowanie" type="string"/>
        </class>

</hibernate-mapping>

Osoba class:

    private int id;
    private String imie;
    private String nazwisko;
    private String email;
    private String telefon;
    private String uczelnia;
    private String doswiadczenie;
    private String skadSlyszal;
    private List zainteresowania;

  public Osoba(){ // domyslny
  }

  // konstruktor zeby mozna bylo sobie w jednej linijce dodawac osobe
   public Osoba(String imie1, String nazwisko1, String telefon1, String email1, String uczelnia1, String doswiadczenie1, String skadSlyszal1 ){
       this.imie = imie1;
       this.nazwisko = nazwisko1;
       this.email = email1;
       this.telefon = telefon1;
       this.uczelnia = uczelnia1;
       this.doswiadczenie = doswiadczenie1;
       this.skadSlyszal = skadSlyszal1;
       }
   // kontr przyj caly obiekt
   public Osoba(Osoba tymczasowa){
       this.imie = tymczasowa.imie;
       this.nazwisko = tymczasowa.nazwisko;
       this.email = tymczasowa.email;
       this.telefon = tymczasowa.telefon;
       this.uczelnia = tymczasowa.uczelnia;
       this.doswiadczenie = tymczasowa.doswiadczenie;
       this.skadSlyszal = tymczasowa.skadSlyszal;
       }
  // gettery, settery
  public int getId() {
      return id;
  }

  public String getImie() {
    return imie;
  }

  public String getNazwisko() {
    return nazwisko;
  }

  public String getEmail() {
    return email;
  }

  public String getTelefon() {
    return telefon;
  }

  public String getUczelnia() {
    return uczelnia;
  }

  public String getDoswiadczenie() {
    return doswiadczenie;
  }

  public List getZainteresowania() {
     return zainteresowania;
  }

  public String getSkadSlyszal() {
     return skadSlyszal;
  }

  public void setImie(String string) {
    this.imie = string;
  }

  public void setId(int in) {
    this.id = in;
  }

  public void setNazwisko(String string) {
    this.nazwisko = string;
  }

  public void setEmail(String string) {
    this.email = string;
  }

  public void setTelefon(String string) {
    this.telefon = string;
  }

  public void setUczelnia(String string) {
    this.uczelnia = string;
  }

  public void setDoswiadczenie(String string) {
    this.doswiadczenie = string;
  }

  public void setZainteresowania(List string) {
    this.zainteresowania = string;
  }

  public void setSkadSlyszal(String string) {
    this.skadSlyszal = string;
  }

Zainteresowania class:

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;
    }

Ok well when I am trying to do this seach query and I pass argument I am getting an error:

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 ?)]

when I change query to this:

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 ?)");

I am getting error:

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)

Line 226 (its wyswietlWybrane method, posted up there)

for (Osoba a : osoby) {List zainteresowania1 = a.getZainteresowania();

line 218 (part of searching method):

wyswietlWybrane(osoby);

I really do need help, tried it in many ways, nothing seem to works.

I believe that the reason is that search query is creating other List than Osoba list - but I need to compare Osoba ID to Zainteresowania ID_Osoby, so how to do this and still be able to pass my result list to my wyswietlWybrane method?

解决方案
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 ?)");

that's the solution, well there are some other problems but at least the list of people is being made

这篇关于Java SQL Query - Hibernate的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-22 10:28