Hibernate Criteria加入3个表

mah*_*ich 60 hibernate join criteria

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

Dokument.class映射到Role roleId

Role.class有一个ContactPerson contactId

Contact.class FirstName LastName

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

我尝试过这样的事情:

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

我得到一个错误无法解决类"Dokument"的属性"LastName"

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

JB *_*zet 116

获取模式仅表示必须获取关联.如果要对关联实体添加限制,则必须创建别名或子标准.我通常更喜欢使用别名,但是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();
Run Code Online (Sandbox Code Playgroud)

这当然在Hibernate参考手册中有很好的解释,而Criteriajavadoc甚至都有例子.阅读文档:它有很多有用的信息.

  • @JBNizet我认为参考手册不能很好地解释.除非你把猫和小猫与商业对象联系起来比我好. (35认同)
  • JB非常感谢.是的,我已经阅读了规范,但对于一个Hibernate newbee来说,围绕所有的Hibernate术语很难掌握.再次感谢它的工作:-) (3认同)