Могу ли я сделать так, чтобы Hibernate создал объект методом фабрики? - PullRequest
14 голосов
/ 05 июня 2009

Есть ли способ отобразить фабричный метод в Hibernate (в отличие от того, чтобы Hibernate вызывал конструктор по умолчанию и отражательно устанавливал свойства или поля)?

И если он не может быть отображен, предоставляет ли Hibernate ловушку для создания пользовательского объекта для каждого класса в отдельности?

Спасибо!

Ответы [ 5 ]

10 голосов
/ 04 ноября 2010

Это можно сделать с помощью:

Я думаю, что подход с перехватчиками проще. Вот кодекс 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;
2 голосов
/ 05 июня 2009

Взгляните на Тип пользователя . Вам нужно будет вызвать вашу фабрику в nullSafeGet () и заполнить все поля самостоятельно. Обратная работа выполняется в nullSafeSet ().

2 голосов
/ 08 июня 2009

И если это не может быть сопоставлено, делает Hibernate предоставляет крючок для пользовательских создание объекта в классе по классу основа

Проверьте сущности слушателей. Они добавляют только аннотации, которые помогут вам. Подумайте, @PrePersist или @ PostLoad.

0 голосов
/ 13 ноября 2010

Не знаю, точно ли я понял, о чем вы просите, но я думаю, что здесь описано решение (см. Решение 4 - Перехватчик Hibernate, метод onLoad): «Проектирование на основе домена с помощью Spring и Hibernate» http://www.jblewitt.com/blog/?p=129

0 голосов
/ 05 июня 2009

См. Транзакции Hibernate и Spring - с использованием частных конструкторов / статических фабричных методов , но не решение для избежания части "отражательно заданных свойств или полей".

...