2009-06-05 9 views

Respuesta

2

Take a look en UserType. Sin embargo, necesitaría llamar a su fábrica en nullSafeGet() y completar todos los campos. El trabajo inverso se realiza en nullSafeSet().

2

Y si no se puede asignar, no Hibernate proporciona un gancho para la creación de objetos personalizados en una clase por clase base?

Echa un vistazo a los oyentes de entidades. Estos agregan solo las anotaciones que lo ayudarán. Piense @PrePersist o @PostLoad.

9

Esto es factible utilizando:

Creo que el enfoque Interceptor es mas facil. Aquí está el javadoc de la Interceptor.instantiate():

/** 
* 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; 
+0

Ninguna de estas soluciones aborda la parte de la pregunta "propiedades o campos reflejados de forma refleja". –

0

No sé exactamente si entendía lo que estás pidiendo, pero creo que una solución se describe aquí (ver solución de 4 - interceptor de hibernación, el método onLoad): "Diseño impulsado por dominio con Spring e Hibernate" http://www.jblewitt.com/blog/?p=129

+0

No, onLoad no permitirá cambiar la forma en que Hibernate crea instancias de entidades, de lo que se trata la pregunta. –

+0

Pensé que la pregunta también era cómo rellenar esos objetos, y hasta donde puedo ver, Interceptor.instantiate no obtiene ningún valor de parámetro, solo el nombre de la clase y el ID del objeto – cdarwin

Cuestiones relacionadas