【发布时间】:2011-05-10 09:57:27
【问题描述】:
我有一个 Person 类,每个人都可以拥有特定语言的文档。 Person 和 Document 类通过多对多关系链接。
我的 Java 代码如下所示:
@Table(name="person")
public class Person {
@Id
@Column(name="id")
private Long id;
@Column(name="name")
private String name;
@ManyToMany(targetEntity=Document.class)
@JoinTable(name="person_document",
joinColumns={
@JoinColumn(name="person_id")
},
inverseJoinColumns={
@JoinColumn(name="document_id")
}
)
private List<Document> documents;
// getter and setter ....
}
public class Document {
@Id
@Column(name="id")
private Long id;
@Column(name="language")
private String language;
// getter and setter ...
}
注意:我在这里使用的是 Hibernate 3。
我想创建一个查询,让我返回所有拥有特定语言文档的人,比如英语。
我的第一次尝试是遵循代码
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.createCriteria(Person.class)
.createAlias("documents", "d")
.add(Restrictions.eq("d.language", "english")
.list();
此代码仅列出拥有英文文档的人但我想要所有人,但每个人只需要英文文档。
例如:
- A 有英文文档 X
- B 拥有法文和英文文件 Y(实际上是 2 个文件)
- C 有法语文档 Z
我想上市:
- 人员 A 持有英文文档 X
- B 人持有英文文档 Y
- 没有文件的人 A
这有意义吗?如果是这样,Hibernate 查询会是什么样子。
因为这真的很难做到,所以我认为这是错误的方法,但我不知道有其他方法可以做到这一点。
感谢您的帮助!
【问题讨论】:
标签: java hibernate many-to-many