gpt4 book ai didi

nhibernate - Hibernate配置如何创建一个对象

转载 作者:行者123 更新时间:2023-12-04 02:07:09 24 4
gpt4 key购买 nike

是否可以配置 Hiberate/NHibernate 在读取数据库时不使用默认构造函数创建对象?

当 Hibernate 从表中读取 10 个客户时,它会创建 10 个 Customer 对象。它通过

Customer c = new Customer();

我可以告诉 Hibernate 改为执行以下操作吗:

Customer c = ACertainStaticFactory.CreateNewCustomer();

甚至管理工厂实例:

ACertainFactory factory = .....;
Customer c = factory.CreateNewCustomer();

或者更复杂,传递我之前设置的参数:

// My client code
Query query = session.CreateQuery(...);
// either:
query.SetSomeParameter(someObject);
// or:
session.SetSomeParameter(someObject);

query.List();

// Hibernate should then behave like this:
Customer c = new Customer(someObject);
// or
Customer c = ACertainStaticFactory.CreateNewCustomer(someObject);
// etc.

这有可能吗?如果是:如何?如果否:是否有替代方案?

最佳答案

When Hibernate reads 10 customers from a table, it creates 10 Customer objects. It does this by (...)

更准确地说,Hibernate 使用 Class<T>#newInstance() 创建依赖于无参数构造函数的实体的新实例。因此需要提供它。

Is that possible in anyway? If yes: How? If no: Is there an alternative?

您的要求看起来接近 Possible to have Hibernate hydrate objects with Factory? Hibernate 论坛上的帖子,所以我将引用 Steve 的回答(已更新以匹配当前名称):

This is totally doable. In fact you have two options:

  1. create a custom EntityPersister implementation;
  2. create a custom Interceptor implementation, specifically the Interceptor.instantiate() method will be of interest to you...

我想我会采用拦截器方式(不确定您的复杂场景,但实现工厂方法看起来很简单)。

关于nhibernate - Hibernate配置如何创建一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3891479/

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