Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 只读多表DTO+Hibernate_Java_Hibernate_Dto_Subquery_Multi Table - Fatal编程技术网

Java 只读多表DTO+Hibernate

Java 只读多表DTO+Hibernate,java,hibernate,dto,subquery,multi-table,Java,Hibernate,Dto,Subquery,Multi Table,我的数据库中有两个表,T1和T2。T1的一列是引用T2的外键。我只需要T1和T2列的一部分进行处理,因此我创建了一个DTO T1T2,它只包含必要的列。为了使用Hibernate将DTO映射到这两个表,我使用了class元素的subselect属性 <hibernate-mapping> <class name="com.xconnect.cdrrecorder.processing.dto.IngressNumRuleVoipProfile" table="n

我的数据库中有两个表,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会将请求转换为两个选择,一个选择另一个

有更好的方法吗?你觉得表演怎么样


谢谢

如果您正在创建DTO,最好像示例中那样从查询中填充DTO。仅当存在支持表时才创建实体


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

谢谢您的回答。在第5.1.1节中,说明了subselect的使用。我的问题是,在哪些情况下,我们需要使用subselect而不是其他查询方式?如链接中所述,有时您希望使用视图,但无法在数据库中创建视图,即使用旧模式。在这种情况下,可以将不可变的只读实体映射到给定的SQL subselect表达式。如果可以的话,跟着风景走。