gpt4 book ai didi

java - 标准多对多 Hibernate

转载 作者:行者123 更新时间:2023-12-02 05:48:48 24 4
gpt4 key购买 nike

@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、说英语的人、说德语的人以及说英语和德语的人我想让所有会说英语和德语的人都使用 Criteria。

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

最佳答案

从可以访问 session 对象(可能是扩展 HibernateDaoSupport 的对象)的 DAO 对象中:

Criteria criteria = getSession().createCriteria(Person.class);
criteria = criteria.createCriteria("languages");

Criterion languageEN = Restrictions.eq("name", "en");
Criterion languageDE = Restrictions.eq("name", "de");
criteria.add(Restrictions.and(languageEN, languageDE));

List<Person> result = criteria.list();

关于java - 标准多对多 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3711374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com