Hibernate Criteria加入3个表

时间:2012-01-04 11:50:44

标签: hibernate join criteria

我正在寻找一个hibernate标准来获得以下内容:

Dokument.class 映射到角色 角色ID

Role.class 有一个ContactPerson 的ContactID

Contact.class 名字 名字

我想在Contact类中搜索First或LastName,并检索已连接的Dokuments列表。

我尝试过这样的事情:

session.createCriteria(Dokument.class)
.setFetchMode("role",FetchMode.JOIN)
.setFetchMode("contact",FetchMode.JOIN)
.add(Restrictions.eq("LastName","Test")).list();

我收到错误无法解析“Dokument”类的属性“LastName”

有人可以解释为什么连接搜索Dokument而不是所有连接表?提前感谢您的帮助!

1 个答案:

答案 0 :(得分:112)

获取模式仅表示必须获取关联。如果要对关联实体添加限制,则必须创建别名或子标准。我通常更喜欢使用别名,但YMMV:

Criteria c = session.createCriteria(Dokument.class, "dokument");
c.createAlias("dokument.role", "role"); // inner join by default
c.createAlias("role.contact", "contact");
c.add(Restrictions.eq("contact.lastName", "Test"));
return c.list();

这当然在Hibernate reference manual中得到了很好的解释,javadoc for Criteria甚至还有例子。阅读文档:它有很多有用的信息。