Как получить Hibernate для вызова моего пользовательского typedef?

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

согласно тому, что я прочитал, я должен иметь возможность создать пакет-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 ответов


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

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

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

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

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

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

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

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

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

ссылка

ресурсы