hibernate标准join3个表

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

Dokument.class被映射到angular色roleId

Role.class有一个ContactPerson contactId

Contact.class名字姓氏

我想在Contact类上searchFirst或LastName,并检索已连接的Dokuments的列表。

我曾尝试过这样的事情:

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

我得到一个错误无法parsing属性“姓氏”类“Dokument”

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

提取模式只表示该关联必须被提取。 如果您想在关联的实体上添加限制,则必须创build别名或子标准。 我通常更喜欢使用别名,但是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参考手册中有很好的解释, Criteria的javadoc甚至有例子。 阅读文档:它有很多有用的信息。