Nhibernate Hibernate配置如何创建对象
是否可以将Hibrate/NHibernate配置为在从数据库读取时不使用默认构造函数来创建对象? 当Hibernate从表中读取10个客户时,它会创建10个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 = ..
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)
,而只是设置了一个只读属性!谢谢你的反馈。