【问题标题】:Hibernate Criteria Join with 3 TablesHibernate Criteria Join 与 3 个表
【发布时间】: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 而不是所有连接的表吗?提前感谢所有帮助!

【问题讨论】:

    标签: hibernate join criteria


    【解决方案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,我想知道是否可以就这个特殊问题向您寻求帮助。 stackoverflow.com/questions/17653399/…
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2015-12-12
    • 2014-01-03
    • 2017-02-16
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多