【问题标题】:Read Only Multitable DTO + Hibernate只读多表 DTO + Hibernate
【发布时间】:2011-10-23 10:46:52
【问题描述】:

我的数据库中有两个表,T1 和 T2。 T1 的一列是引用 T2 的外键。我只需要 T1 和 T2 的一部分列进行处理,因此我创建了一个仅包含必要列的 DTO T1T2。为了使用 Hibernate 将 DTO 映射到这两个表,我使用了 class 元素的 subselect 属性。

<hibernate-mapping>
<class
    name="com.xconnect.cdrrecorder.processing.dto.IngressNumRuleVoipProfile"
    table="numbermodificationrules"
    subselect="select ... from T1 left join T2 on id1=id2 where ...">

    <cache usage="read-only"/>

...

</class>
</hibernate-mapping>

我注意到当我需要选择一个对象时,Hibernate 会将请求转换为两个选择(一个选择另一个)。

有没有更好的方法来做到这一点?你对表演有什么看法?

谢谢

【问题讨论】:

    标签: java hibernate dto subquery multi-table


    【解决方案1】:

    如果您正在创建 DTO,最好从查询中填充 DTO,例如 here。仅当有后备表时才创建实体。

    如果经常使用 DTO,您可以在数据库中编写一个视图并创建一个简单的 DTO 实体来引用它。由于视图是在数据库中预编译的,所以速度会更快。

    【讨论】:

    • 感谢您的回答。在这个link(第 5.1.1 节)中,解释了 subselect 的使用。我的问题是在哪些情况下我们需要使用 subselect 而不是其他方式进行查询?
    • 如链接中所述,有时您想使用视图,但无法在数据库中创建视图(即使用旧架构)。在这种情况下,您可以将不可变的只读实体映射到给定的 SQL 子选择表达式。如果可以,请看风景。
    猜你喜欢
    • 2010-11-24
    • 2013-12-12
    • 1970-01-01
    • 2011-04-21
    • 2021-06-07
    • 1970-01-01
    • 2016-03-08
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多