java - 标准多对多 Hibernate

标签 java sql hibernate many-to-many criteria

@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/

相关文章:

java - Hibernate : org. hibernate.QueryParameterException:无法找到命名参数

mysql - 表格设计建议

每个日期/时间有多个组的MySQL查询计数

java - hibernate 3 : unable to query PostgreSQL database

java - 这段用红、黄、绿灯绘制红绿灯的代码是如何工作的?

sql - Sequelize.js postgres 横向使用

hibernate - 如何在 JPA/Play 框架的 LIKE 子句中使用百分比?

java - 用于 Vaadin Web 应用程序的简单 Java 图形 API

java - 将连字符分隔的单词(例如 "do-some-stuff")转换为较小的驼峰变体(例如 "doSomeStuff")的最优雅方法是什么?

java - 如何收集顺序调用异步 API 的结果?