一尘不染

Hibernate标准与3个表联接

hibernate

我正在寻找一个hibernate标准以获取以下信息:

Dokument.class映射到角色roleId

Role.class具有一个ContactPerson contactId

Contact.class名字姓

我想在Contact类中搜索名字或姓氏,并检索连接的Dokuments列表。

我已经尝试过这样的事情:

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

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

有人可以解释为什么联接在Dokument而不是在所有联接的表上搜索吗?在此先感谢您提供的所有帮助!


阅读 306

收藏
2020-06-20

共1个答案

一尘不染

提取模式仅表示必须提取关联。如果要对关联实体添加限制,则必须创建别名或子条件。我通常更喜欢使用别名,但是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参考手册中已有很好的解释,甚至Criteriajavadoc都包含示例。阅读文档:它具有大量有用的信息。

2020-06-20