Hibernate Criteria Join 与 3 个表

Posted

技术标签:

【中文标题】Hibernate Criteria Join 与 3 个表【英文标题】:Hibernate Criteria Join with 3 Tables 【发布时间】:2012-02-02 07:50:27 【问题描述】:

我正在寻找一个休眠标准来获得以下信息:

Dokument.class 映射到角色 角色ID

角色.class 有一个联系人 联系方式

联系人.class 名 姓氏

我想在 Contact 类中搜索 FirstName 或 LastName 并检索已连接的文档列表。

我尝试过这样的事情:

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

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

有人能解释一下为什么连接搜索的是 Dokument 而不是所有连接的表吗?提前感谢所有帮助!

【问题讨论】:

【参考方案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 reference manual 中有很好的解释,javadoc for Criteria 甚至有例子。阅读文档:它有很多有用的信息。

【讨论】:

JB 非常感谢。是的,我已经阅读了规范,但是对于一个 Hibernate 新手来说,很难理解所有的 Hibernate 术语。再次感谢它的工作:-) 顺便说一句,什么是关联,只是一些参考? 关联是指一个实体通过 OneToOne、OneToMany、ManyToOne 或 ManyToMany... 关联链接到另一个实体。 @JBNizet 我认为参考手册没有很好地解释。除非你比我更擅长将猫和小猫与商业对象联系起来。 @JBNizet,我想知道是否可以就这个特殊问题向您寻求帮助。 ***.com/questions/17653399/…

以上是关于Hibernate Criteria Join 与 3 个表的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate Criteria join 查询一对多

(懒惰)使用 Hibernate Criteria API 的 LEFT OUTER JOIN

hibernate hql查询 与Criteria 查询语句区别和效率

hibernate之HQL,Criteria与SQL

hibernate里‘query’和‘ Criteria’分别啥时候用

Hibernate Criteria用法大全