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