我的JPA/Hibernate自定义类型出了什么问题?

yeg*_*256 2 java hibernate jpa

我的自定义类型是(没有默认构造函数!):

package com.XXX.common;
public class Email implements Serializable {
  private String e;
  public Email(String str) {
    e = str;
  }
}
Run Code Online (Sandbox Code Playgroud)

我在Hibernate 3.5.6中的实体:

package com.XXX.persistence;
import com.XXX.common;
@Entity
@TypeDef(
  name = "email",
  defaultForType = Email.class,
  typeClass = Email.class
)
public class User {
  @Id private Integer id;
  @Type(type = "email")
  private Email email;
}
Run Code Online (Sandbox Code Playgroud)

Hibernate说:

org.hibernate.MappingException: Could not determine type for:
com.XXX.common.Email, at table: user, for columns: 
[org.hibernate.mapping.Column(email)]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Pas*_*ent 5

我的自定义类型是(没有默认构造函数!)(...)

自定义类型必须实现其中一个接口org.hibernate.usertype(实现UserType对于您的特定示例就足够了),您的Email不是自定义类型.换句话说,您需要创建一些EmailTypeHibernate将用于持久化字段或类型属性的类Email.

PS:有一个IMO没有太大的价值, String但是让我们说这是一个例子.

参考

资源