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

标签 c# mysql nhibernate hibernate

我正在使用 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/

相关文章:

c# - SQL Select - 作为一个返回

php foreach循环用几个词搜索mysql表

nhibernate - 使用 NHibernate 在 Unity 拦截下从代理获取真实实例

NHibernate:多对一和惰性

linq - 编译的 LINQ 查询 - NHibernate

c# - DateTime.ParseExact 的更快替代品

c# - 如何在来自 Web API 的窗体加载事件上预填充 Windows 窗体控件?

c# - EF 代码首先 List<DateTime> 不创建表

javascript - 未捕获的语法错误 : Unexpected identifier (alert connected)

MySQL:无法正确计算百分比