Тип пользователя Hibernate не регистрируется по умолчанию

Я написал собственный тип пользователя для обработки даты, когда значение равно NULL и используется в моем pojo как

@Entity
@Table(name="Person"
)
public class Person {

    private int id;

    @Column(name="dob", length=10)
    @Type(type="poc.datetype.DateTimeUserType")
    private Date dob;

    //... getters and setters
}

При попытке сохранить человека в БД пользовательский тип DateTimeUserType не вызывается.

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

DateTimeUserType dateTimeUserType = new DateTimeUserType();
configuration.registerTypeOverride(dateTimeUserType,new String[] { dateTimeUserType.returnedClass().getName() });

Я рассмотрел много примеров использования пользовательского типа пользователя, но никто не зарегистрировался в конфигурации гибернации. Мой вопрос: обязательно ли регистрировать пользовательский тип пользователя в конфигурации или он должен работать без регистрации?

Спящая версия с использованием 4.3.5.Final


person Sunil Kumar    schedule 13.07.2015    source источник
comment
Ваш код выглядит нормально, вы расширили класс java.util.Date? public class DateTimeUserType extends java.util.Date { .. }   -  person Raman Sahasi    schedule 13.07.2015
comment
Нет, мой пользовательский тип не расширяет java.util.date. открытый класс DateTimeUserType реализует UserType {...}, нужно ли расширять java.util.Date, если да, то в чем может быть причина?   -  person Sunil Kumar    schedule 13.07.2015
comment
Я решил эту проблему либо путем регистрации пользовательских типов на диалекте, либо в режиме гибернации sessionFactory.   -  person Sunil Kumar    schedule 29.09.2015


Ответы (2)


Всякий раз, когда у вас есть типы пользователей/CustomTypes, используемые в классах pojo, вы должны зарегистрировать UserTypes/CustomType для конфигурации гибернации. И это можно сделать двумя способами: либо зарегистрировать пользовательский тип на диалекте, либо зарегистрировать конфигурацию гибернации. Ниже описан способ использования UserType и регистрации типа пользователя в конфигурации.

Класс ПОЖО:

@TypeDefs({
                        @TypeDef(
                         name = "DateTime",
                         defaultForType = org.joda.time.LocalDateTime.class,
                         typeClass = com.common.data.type.WMPersistentLocalDateTime.class
               )
})

@Entity
@Table(name="TABLE1"
    ,schema="tr11"
)
public class Table1  implements java.io.Serializable
 {
@Type(type="DateTime")
private LocalDateTime column3;

...getters & setters ....
}

Регистрация типа пользователя:

sessionFactory.registerTypeOverride(new com.common.data.type.WMPersistentLocalDateTime(), new String[]{"DateTime"});
person Sunil Kumar    schedule 29.09.2015

См. мой пост ниже, UserType API menthods не вызываются из запроса Criteria Builder в спящем режиме И мой ответ там, это ошибка в hinerate

исправлено в версии 5.2.0.Final

person Gowrav    schedule 04.04.2017