Java SQL Query - Hibernate -
so got query made list , pass list method should print it.
query query = session.createquery("from osoba o fetch properties ((o.id) = (id_osoby)) , (lower(zainteresowania.zainteresowanie) ?) , (lower(zainteresowania.zainteresowanie) ?) , (lower(zainteresowania.zainteresowanie) ?) , (lower(zainteresowania.zainteresowanie) ?) , (lower(zainteresowania.zainteresowanie) ?)"); // query query = session.createquery("from osoba (lower(zainteresowania) ?)"); // 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 want print use:
list<osoba> osoby = session.createquery("from osoba").list(); // tworzymy sobie liste z zapytania bazy ktora wyswietli nam wszystkich wyswietlwybrane(osoby); // przekazujym ta liste innej wyswietlamy
method prints pass:
private void wyswietlwybrane(list<osoba> osoby) { (osoba : 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: "); (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 when trying seach query , pass argument getting 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 o fetch properties ((o.id) = (id_osoby)) , (lower(zainteresowania.zainteresowanie) ?) , (lower(zainteresowania.zainteresowanie) ?) , (lower(zainteresowania.zainteresowanie) ?) , (lower(zainteresowania.zainteresowanie) ?) , (lower(zainteresowania.zainteresowanie) ?)]
when change query this:
query query = session.createquery("from osoba o, zainteresowania z fetch properties ((o.id) = (id_osoby)) , (lower(z.zainteresowanie) ?) , (lower(z.zainteresowanie) ?) , (lower(z.zainteresowanie) ?) , (lower(z.zainteresowanie) ?) , (lower(z.zainteresowanie) ?)");
i getting error:
exception in thread "main" java.lang.classcastexception: [ljava.lang.object; cannot cast com.mycompany.kwestionariusz.osoba @ com.mycompany.kwestionariusz.osoba.wyswietlwybrane(osoba.java:226) @ com.mycompany.kwestionariusz.osoba.wyszukajosoby(osoba.java:218) @ com.mycompany.kwestionariusz.main.main(main.java:42)
line 226 (its wyswietlwybrane method, posted there)
for (osoba : osoby) {list zainteresowania1 = a.getzainteresowania();
line 218 (part of searching method):
wyswietlwybrane(osoby);
i need help, tried in many ways, nothing seem works.
i believe reason search query creating other list osoba list - need compare osoba id zainteresowania id_osoby, how , still able pass result list wyswietlwybrane method?
the reason running problem specifying 2 hibernate entities in section of query , default selecting every column of both tables since dont specify select.
this returning object[] of entity properties why getting cast exception.
to fix try explicitly select every named property of o entity want , should smart enough map o entities instead of object[].
also noticed not joining 2 tables together. give cartesian product believe. fix add join filter:
... osoba o inner join o.zainteresowania z fetch ...
this limit z entities ones exist children in o.
Comments
Post a Comment