【问题标题】:Hibernate Criteria Projection without mapped association of tables没有表的映射关联的休眠标准投影
【发布时间】:2014-10-30 01:08:21
【问题描述】:

我有两张桌子说

表 1 和表 2

现在 Table1 有 3 列 t1、t2、t3 和 Table2 有 2 列 t4 和t5。

我必须通过连接从两个表中获取数据,但是注释或 xml 中的两个表之间没有映射关联。

现在的主要问题是我必须使用休眠投影从两个表中获取选定的列,例如 Table1 中的 t1、t2 和 Table2 中的 t4。

我浏览了互联网,但找到了具有关联的表的示例。

很高兴有这方面的指导。

【问题讨论】:

    标签: hibernate hibernate-criteria


    【解决方案1】:

    是的,Hibernate支持。这里唯一的事情是我们必须使用 HQL

    可能会出现多个类,从而产生笛卡尔积或“交叉”连接。

    from Formula, Parameter
    from Formula as form, Parameter as param
    

    所以在我们的例子中:

    session
       .createQuery("SELECT t1.prop1, t1.prop2, t1.prop3 "
                  + "       t2.prop4, t2.prop5 "
                  + " FROM Entity1 AS t1, Entity2 As t2 " +
                  // if there is some relation - unmapped
                  + " WHERE t1.someProperty = t2.someProperty "
                  + "   AND ... "
                  )
       .setMaxResults(10) // we can even page here
       .list() 
    

    注意:我使用了 prop1、prop2 和 Entity1、Entity2 ... 来强制感觉这是 HQL。我们谈论的是映射实体,而不是表或列

    我们将收到object[] 数组的集合...

    【讨论】:

    • 感谢 Radim,但我正在使用 Hibernate 标准和休眠投影来实现这一点,并且表示 Table1 和 Table2 的实体之间没有任何映射。
    • 再一次 ;) 1) 此功能仅在 HQL 中受支持,并且 2) 我们在这些表之间没有任何关系!不,检查我的 HQL。它只是 CROSS JOIN... 如果您愿意... 您可以添加 WHERE... 但您不必这样做。标准支持它。但是,如果您要检查的话..几乎是一样的。作为标准和预测!只需通过结果转换器.. 总结:1) 使用 hql,2) 没有任何映射关系,3) 结果transformer ...你可以得到你的结果。注意:唯一需要的是两个表都映射为实体
    • 谢谢 Radim 我想我会使用 HQL 来达到同样的效果。
    • 伟大的先生!享受很棒的休眠 ;)
    猜你喜欢
    • 2012-09-06
    • 2015-07-17
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    相关资源
    最近更新 更多