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 API 的 LEFT OUTER JOIN
hibernate hql查询 与Criteria 查询语句区别和效率