gpt4 book ai didi

c# - NHibernate 内连接仅获取某些列?

转载 作者:行者123 更新时间:2023-11-29 01:25:00 25 4
gpt4 key购买 nike

我正在使用 nHibernate 和 MySQL 开发一个应用程序。

我有一个每秒运行的 HQL 命令,在这个命令中我执行“Inner Join Fetch”,如下所示:

"from Order o inner join fetch o.Customer order by o.Date"

它工作正常,但它填充了“Customer”的所有属性,并且我在数据库中有很多列(几乎 40 列)。我只需要在我的表示层中显示一些列,例如名称、地址和电话。

有没有办法只让某些属性进行 Fecth Join 或其他提高性能的方法?

谢谢...

干杯

最佳答案

您可以创建一个辅助只读映射,仅将部分列提取到 Dto(数据传输对象)中:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Your.NameSpace" assembly="Your.Assembly">
<class name="OrderDto" table="[Order]" schema-action="none" lazy="false" mutable="false">
<id name="Id">
<generator class="native"/>
</id>
<many-to-one name="CustomerDto" class="CustomerDto"/>
<!-- Other properties-->
</class>
</hibernate-mapping>

这样,您就可以完全控制从数据库中提取的内容。但也有一个不利的一面 - 确保将其标记为 mutable="false",否则您可能会在没有完整数据的情况下保存它。

如果你真的想变得疯狂 - 你让 OrderDto 实现与普通订单相同的接口(interface) - 然后当请求尚未加载的属性时 - 你获取完整的订单。这增加了相当多的复杂性,但您可以获得极大的灵活性,并且能够使用 Dto 代替真实对象,并具有 Dto 的所有性能优势。 (这也称为代理模式,而第一位有时称为PresentationModel,因为它是为没有正常业务逻辑的演示而定制的。)

关于c# - NHibernate 内连接仅获取某些列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com