Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Nhibernate Hibernate配置如何创建对象_Nhibernate_Hibernate_Orm - Fatal编程技术网

Nhibernate Hibernate配置如何创建对象

Nhibernate Hibernate配置如何创建对象,nhibernate,hibernate,orm,Nhibernate,Hibernate,Orm,是否可以将Hibrate/NHibernate配置为在从数据库读取时不使用默认构造函数来创建对象? 当Hibernate从表中读取10个客户时,它会创建10个Customer对象。它是通过 Customer c = new Customer(); 我是否可以让Hibernate执行以下操作: Customer c = ACertainStaticFactory.CreateNewCustomer(); 甚至可以管理factory实例: ACertainFactory factory = ..

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

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

Customer c = new Customer();
我是否可以让Hibernate执行以下操作:

Customer c = ACertainStaticFactory.CreateNewCustomer();
甚至可以管理factory实例:

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.

在任何情况下都可能吗?如果是:如何?如果没有:是否有其他选择?

请查看以下内容,可能会有所帮助:

当Hibernate从表中读取10个客户时,它会创建10个客户对象。它通过(…)来实现这一点

更准确地说,Hibernate用于创建依赖于no-arg构造函数的实体的新实例。因此,有必要提供它

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

您的需求与Hibernate论坛上的主题非常接近,因此我将引用Steve的答案(更新以匹配当前名称):

这是完全可行的。其实你 有两种选择:

  • 创建自定义实现
  • 创建自定义实现,特别是 方法将 对你感兴趣

  • 我想我会选择拦截器(不确定您的复杂场景,但实现工厂方法看起来非常简单)。

    结果听起来不错,与实现拦截器相比仍然非常复杂。(还需要深入阅读这两个参考资料。)嗨,帕斯卡。我实现了自己的
    拦截器
    ,它做到了。我继承了
    EmptyInterceptor
    ,并重写了
    OnLoad
    ,而不是
    instantiate
    ,因为到目前为止,我只需要在对象上设置一个属性,这样NHibernate就可以从类字符串创建对象并从ISerializable对象设置其ID。通过这一点,我获得了类似于我最后一行代码的东西,
    Customer c=new Customer(someObject)
    ,而只是设置了一个只读属性!谢谢你的反馈。