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

Java 我可以让Hibernate通过工厂方法创建对象吗?,java,hibernate,orm,factory,Java,Hibernate,Orm,Factory,是否有一种方法可以在Hibernate中映射工厂方法(而不是让Hibernate调用默认构造函数并反射地设置属性或字段) 如果它不能被映射,Hibernate是否提供了一个钩子来逐个类地创建自定义对象 谢谢 请参阅,但不是避免“反射设置属性或字段”部分的解决方案。位于。不过,您需要在nullSafeGet()中调用工厂并自己填充所有字段。反向工作在nullSafeSet()中完成 如果它不能被映射,是吗 Hibernate提供了一个用于定制的钩子 按类在类上创建对象 基础 检查实体侦听器。这些添

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

如果它不能被映射,Hibernate是否提供了一个钩子来逐个类地创建自定义对象

谢谢

请参阅,但不是避免“反射设置属性或字段”部分的解决方案。

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

如果它不能被映射,是吗 Hibernate提供了一个用于定制的钩子 按类在类上创建对象 基础


检查实体侦听器。这些添加的注释将帮助您解决问题。考虑@PrePersist或@PostLoad。

这可以通过以下两种方式实现:

  • 自定义实现(您可以)~或~
  • 实现该方法的自定义
我认为拦截方法更容易。以下是的javadoc:

/**
*实例化实体类。返回null以指示Hibernate应使用
*类的默认构造函数。返回实例的标识符属性
*应使用给定的标识符初始化。
*
*@param entityName实体的名称
*@param entityMode要返回的实体实例的类型。
*@param id新实例的标识符
*@返回类的实例,或null选择默认行为
*/
公共对象实例化(String entityName、EntityMode EntityMode、Serializable id)抛出回调异常;

我不知道我是否完全理解您的要求,但我认为这里描述了一个解决方案(请参阅解决方案4-Hibernate拦截器,方法onLoad):“使用Spring和Hibernate的域驱动设计”

不,onLoad不允许更改Hibernate实例化实体的方式,这就是问题所在。我以为问题也在问如何填充这些对象,就我所见,Interceptor.instantiate没有获得任何参数值,只有类名和对象ID。这些解决方案都没有解决问题的“反射设置属性或字段”部分。
/**
 * 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;