Как мне заставить Hibernate вызывать мой пользовательский typedef? - PullRequest
6 голосов
/ 28 сентября 2010

Я пытаюсь определить CompositeUserType для обработки определенного типа в моем приложении JPA / Hibernate.У меня есть CompositeUserType с именем ApplicationMessageType, который предназначен для обработки моего отображения.

Согласно тому, что я прочитал, я должен иметь возможность создать класс package-info.java в моей иерархии доменов, который содержит TypeDefs.Мой выглядит следующим образом:

@TypeDefs({
    @TypeDef(
        defaultForType = ApplicationMessage.class,
        typeClass = ApplicationMessageType.class
    )
})
package mptstp.domain;

import mptstp.domain.messages.ApplicationMessage;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;

Если я правильно понимаю, тот факт, что я использую параметр defaultForType для TypeDef, каждый раз, когда я пытаюсь сохранить или загрузить ApplicationMessage, должен вызываться код пользовательского типа.

Я установил точки останова для каждого метода в классе ApplicationMessageType, и ни один из них когда-либо не был вызван.

Кто-нибудь знает, куда я ушел?неправильно?Код компилируется, но кажется, что аннотации TypeDef никогда не вызывались для регистрации ApplicationMessageType.

Любые указатели были бы очень благодарны ...

Спасибо

1 Ответ

2 голосов
/ 29 сентября 2010

Я пытаюсь определить CompositeUserType для обработки определенного типа в моем приложении JPA / Hibernate.У меня есть CompositeUserType с именем ApplicationMessageType, который предназначен для обработки моего отображения.

Имейте в виду, что вам придется объявлять столбцы (используя аннотацию @Columns) на уровне поля или свойства для вашего составного тип пользователя.

Согласно тому, что я прочитал, я должен иметь возможность создать класс package-info.java в моей иерархии доменов, который содержит TypeDefs.

Это правильно, и это рекомендуемая стратегия, когда пользовательский тип используется более чем в одном объекте.

Если я правильно понимаю, тот факт, что я использую параметр defaultForType для TypeDef, каждый раз, когда я пытаюсь сохранить или загрузить ApplicationMessage, должен вызываться код пользовательского типа.

Теоретически элемент defaultForType означает, что когда Hibernate встречает свойство класса ApplicationMessage, он должен делегировать стратегию персистентности пользовательскому типу отображения ApplicationMessageType.

Но я уверен, что это работает с составным типом пользователя, хотя, я не уверен, придется ли вам повторять @Type, чтобы объявить @Columns (в этом случае вам следуетобъявите псевдоним name в TypeDef).

Кто-нибудь знает, где я ошибся?Код компилируется, но похоже, что аннотации TypeDef никогда не вызывались для регистрации ApplicationMessageType ..

Не могу сказать.Удалось ли вам действительно сохранить сущность со свойством класса ApplicationMessage или нет вообще?Может быть, показать аннотированный объект.

Ссылка

Ресурсы

...