默认情况下,Hibernate用户类型未注册

时间:2015-07-13 15:19:15

标签: java hibernate hibernate-tools

我编写了一个自定义用户类型来处理值为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
}

当尝试在DB中持久化Person时,自定义类型DateTimeUserType未调用。

但是如果我将自定义用户类型注册到休眠配置,那么它就可以正常工作。

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

我经历了许多使用自定义用户类型的例子,但没有人注册到hibernate配置。 我的问题是,是否必须将自定义用户类型注册到配置,否则它应该无需注册?

使用4.3.5.Final

的Hibernate版本

2 个答案:

答案 0 :(得分:0)

每当你在pojo类中使用usertypes / CustomTypes时,你必须将userTypes / CustomType注册到hibernate配置。它可以通过两种方式完成,可以在方言中注册自定义类型,也可以注册到hibernate配置。 以下是使用UserType并将用户类型注册到配置的方法。

POJO班级:

  $scope.needLogin = true;
  $scope.focusLogin = function() {
    // avoid 'form invalid' state when browser auto-complete form fields
    $('#LoginView_Username').trigger('input');
    $('#LoginView_Password').trigger('input');
    if (!$scope.loginForm.$invalid) {
      // commonService.info('ok, click on login button');
      $scope.needLogin = false;
    }
    if (!$scope.needLogin) {
      return;
    }
    setTimeout($scope.focusLogin, 1000);
  };

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 ....
}

答案 1 :(得分:0)

请参阅我的以下帖子,UserType api menthods are not called from Criteria Builder query in hibernate 我在那里的答案,它是一个hinerate的错误

它已在5.2.0.Final版本

中修复