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

2022-09-04 03:06:00

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

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

谢谢!


答案 1

这可以通过以下方式之一实现:

我认为拦截器方法更容易。以下是 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;

答案 2

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


推荐