只读多表 DTO +休眠
我的数据库中有两个表,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 会将请求转换为两个选择(一个选择另一个)。
有更好的方法吗?对于表演你有什么看法?
谢谢
I have two tables in my DB, T1 and T2. One column of T1 is a foreign key that references T2. I need only a part of the columns of T1 and T2 for my processing, thus I've created a DTO T1T2 that contains only the necessary columns. To map the DTO to these two tables with Hibernate, I used subselect attribute of the class element.
<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>
I noticed that when i need to select for an object, Hibernate converts the request to two selects (one into the other).
Is there a better way to do this? What do you think about performances?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您要创建 DTO,最好从查询中填充 DTO,如示例 此处。仅当有支持表时才创建实体。
如果经常使用 DTO,您可以在数据库中编写一个视图并创建一个简单的 DTO 实体来引用它。由于视图是在数据库中预编译的,因此速度会更快。
If you are creating a DTO, better to fill the DTO from the query as in an example here. Only create the entity if there are backing tables.
If the DTO is used very often you can write a view in the DB and create a simple DTO entity to refer that. Since view is pre-compiled in the DB, it will be faster.