我可以让Hibernate通过工厂方法创建一个对象吗?

时间:2009-06-05 00:48:48

标签: java hibernate orm factory

有没有办法在Hibernate中映射工厂方法(而不是让Hibernate调用默认构造函数并反射设置属性或字段)?

如果无法映射,Hibernate是否为逐个类的自定义对象创建提供了一个钩子?

谢谢!

5 个答案:

答案 0 :(得分:10)

使用以下任一方法都可以:

我认为拦截器方法更容易。这是Interceptor.instantiate()

的javadoc
/**
 * Instantiate the entity class. Return <tt>null</tt> to indicate that Hibernate should use
 * the default constructor of the class. The identifier property of the returned instance
 * should be initialized with the given identifier.
 *
 * @param entityName the name of the entity
 * @param entityMode The type of entity instance to be returned.
 * @param id the identifier of the new instance
 * @return an instance of the class, or <tt>null</tt> to choose default behaviour
 */
public Object instantiate(String entityName, EntityMode entityMode, Serializable id) throws CallbackException;

答案 1 :(得分:2)

Take a lookUserType

{{3}}。您需要在nullSafeGet()中调用工厂并自己填充所有字段。反向工作在nullSafeSet()中完成。

答案 2 :(得分:2)

  

如果它无法映射,那么   Hibernate为自定义提供了一个钩子   按类创建对象   依据?

检查实体侦听器。这些只会添加可以帮助您的注释。想想@PrePersist或@PostLoad。

答案 3 :(得分:0)

请参阅Hibernate and Spring transactions - using private constructors/static factory methods,但不是避免“反射设置属性或字段”部分的解决方案。

答案 4 :(得分:0)

我不知道我是否完全理解你所要求的内容,但我认为这里描述了一个解决方案(参见解决方案4 - Hibernate拦截器,方法onLoad):“Spring驱动设计与Spring和Hibernate”{ {3}}