2009-06-05 9 views

risposta

2

Take a look a UserType. Dovresti chiamare la tua fabbrica in nullSafeGet() e compilare tutti i campi tu stesso. Il lavoro inverso viene eseguito in nullSafeSet().

2

E se non può essere mappato, non Hibernate fornisce un gancio per la personalizzazione la creazione di oggetti su una classe per classe base?

Verificare i listener di entità. Questi aggiungono solo le annotazioni che ti aiuteranno. Pensa a @PrePersist o @PostLoad.

9

Questo è fattibile utilizzando:

Interceptor.instantiate() penso che l'approccio Interceptor è più facile. Ecco il javadoc del 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

Nessuna di queste soluzioni risolve la parte "domande o campi di riflessione" della domanda. –

0

Non so se ho capito esattamente quello che stai chiedendo, ma penso che una soluzione è descritta qui (vedi soluzione 4 - Hibernate intercettore, il metodo onLoad): "Progettazione basata su domini con molla e sospensione" http://www.jblewitt.com/blog/?p=129

+0

No, onLoad non consente di modificare il modo in cui Hibernate crea un'istanza delle entità, che è la domanda. –

+0

Ho pensato che la domanda stava chiedendo come popolare anche quegli oggetti, e per quanto posso vedere, Interceptor.instantiate non ottiene alcun valore di parametro, solo il nome della classe e l'id dell'oggetto – cdarwin

Problemi correlati