我有一个班级人员,每个人都可以拥有特定语言的文件。 Person和Document类与Many-To-Many关系链接。
我的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();
此代码仅列出拥有英文文档但的人员。我想要所有人,但每个人只需要英文文档。
例如:
我想列出:
这有意义吗?如果是这样,Hibernate查询如何查询就像。
由于这很难得到,我正在考虑这是错误的做法,但我不知道其他任何方法。
感谢您的帮助!
答案 0 :(得分:2)
你应该查询反之亦然。这意味着您应该加载英文文档,并从文档对象中加载您可以获取的文档。
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.createCriteria(Documentn.class)
.createAlias("documents", "d")
.add(Restriction.eq("d.language", "english")
.list();