I have spring based program, that searches from DB based on what I pick.
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MapKeyColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
My mapping files:
ListaZainteresowan:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://ift.tt/UNuKEd">
<hibernate-mapping>
<class name="pl.ckzeto.kwestionariusz.ListaZainteresowan" table="zainteresowania">
<id column="id" name="id" type="int">
<generator class="native"/>
</id>
<property column="zainteresowanie" name="zainteresowanie" type="string"/>
</class>
</hibernate-mapping>
Osoba:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://ift.tt/IMLJSW">
<hibernate-mapping package="pl.ckzeto.kwestionariusz">
<class name="Osoba" table="OSOBA">
<id column="id" name="id" type="int">
<generator class="native"/>
</id>
<property column="Imie" name="imie"/>
<property column="Nazwisko" name="nazwisko"/>
<property column="Telefon" name="telefon"/>
<property column="Email" name="email"/>
<property column="Uczelnia" name="uczelnia"/>
<property column="Doswiadczenie" name="doswiadczenie"/>
<list cascade="all" name="zainteresowania">
<key column="id_osoby"/>
<list-index column="idx"/>
<one-to-many class="Zainteresowania"/>
</list>
<property column="SkadSlyszal" name="skadSlyszal"/>
</class>
</hibernate-mapping>
Zainteresowania
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://ift.tt/UNuKEd">
<hibernate-mapping package="pl.ckzeto.kwestionariusz">
<class name="Zainteresowania" table="OSOBA_ZAINTERESOWANIA">
<id column="id" name="id" type="int">
<generator class="native"/>
</id>
<property column="zainteresowanie" name="zainteresowanie" type="string"/>
</class>
</hibernate-mapping>
All was working just fine before I changed XML mapping to annotations like that: Here I added annotations and Serializable because netbeans wanted me to do it with annotations
Zainteresowania:
@Entity
@Table(name="OSOBA_ZAINTERESOWANIA")
public class Zainteresowania implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue
private int id;
@Column(name="zainteresowanie")
private String zainteresowanie;
public Zainteresowania(){ // domyslny
}
Osoba: here it was private List<> zainteresowania = new ArrayList(); before, I had to change it to private List zainteresowania = new ArrayList(); because program didnt want to compile (it worked without annotations, only with them there was such a problem). Also serializable is added comparing to program based on XML mapping.
@Entity
@Table(name="OSOBA")
public class Osoba implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue
private int id;
@Column(name="Imie")
private String imie;
@Column(name="Nazwisko")
private String nazwisko;
@Column(name="Email")
private String email;
@Column(name="Telefon")
private String telefon;
@Column(name="Uczelnia")
private String uczelnia;
@Column(name="Doswiadczenie")
private String doswiadczenie;
@Column(name="SkadSlyszal")
private String skadSlyszal;
@OneToMany(cascade=CascadeType.ALL)
@MapKeyColumn(name="id_osoby")
@org.hibernate.annotations.IndexColumn(name="idx")
private List<Zainteresowania> zainteresowania = new ArrayList();
public Osoba(){ // domyslny
}
and ListaZainteresowan:
@Entity
@Table(name="zainteresowania")
public class ListaZainteresowan implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue
private int id;
@Column(name="zainteresowanie")
private String zainteresowanie;
comparing to program based on xml annotations I added only serializable because netbeans wanted me to.
My DB search query is:
String zapytanie = "select o from Osoba o " +
"join o.zainteresowania z " +
"where z.zainteresowanie in (:tags) " +
"group by o " +
"having count(z)=:tag_count";
return zapytanie;
}
and again as I said it worked before I changed to annotations.
Now the problem is it only works when I dont choose any "zainteresowanie" - then I can see all people because then query is just:
select o from Osoba o
But it doesnt work as it should anyway - the field Zainteresowania is empty now - so something is wrong, probably after changing List to but there was compiling error without it (after i added annotations, before it worked).
What to do?
Aucun commentaire:
Enregistrer un commentaire