3
@Entity
public class Person implements Serializable {
private int id;
...........
private Set<Languages> languages = new HashSet<Languages>();
...............
@ManyToMany
@JoinTable(name = "link_person_languages")
public Set<Languages> getLanguages() {
return languages;
}
}
@Entity
public class Languages implements Serializable {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
@Column(nullable = false, length = 40, unique = true)
public String getName() {
return name;
}
Допустим, у меня есть Языки Eng Germ, Люди, кто говорит анг, люди, которые говорят на немецком, и люди, которые говорят Eng и немецкий Я хочу, чтобы все люди, кто говорит и Английский и немецкий, используя критерии.Критерии Многие ко многим Hibernate
crit.createAlias("languages", "l");
Conjunction con = Restrictions.conjunction();
for (int j = 0; j < o.length; j++) {
Criterion tmp = Restrictions.eq("l.id", ((Languages)o[j]).getId());
con.add(tmp);
}
crit.add(con);
select
this_.id as y0_,
this_.lastName as y1_,
this_.firstName as y2_,
this_.socialNumber as y3_
from
Person this_
inner join
link_person_languages languages3_
on this_.id=languages3_.Person_id
inner join
Languages l1_
on languages3_.languages_id=l1_.id
where
(
l1_.id=?
and l1_.id=?
)
это будет список всех людей, о которых говорит анг, и все люди, о которых говорит Ger , а также все люди, говорящие на обоих языках, то, что мне нужно, это критерии, которые будут выбирать только более поздние, люди, которые говорят на английском и немецком языках. – Darwly
Ahh .. чем вам нужно, а не OR: criteria.add (Restrictions.and (languageEN, languageDE)); – Ice
, который тоже не работает, плохо получить sql – Darwly