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

时间:2010-09-30 09:05:02

标签: java hibernate jpa

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

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

我在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;
}

Hibernate说:

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

我做错了什么?

2 个答案:

答案 0 :(得分:5)

  

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

自定义类型必须实现org.hibernate.usertype中的一个界面(实施UserType就足以满足您的具体示例),您的Email自定义类型。换句话说,您需要创建一些EmailType类,Hibernate将使用该类来保存类型为Email的字段或属性。

PS:IMO在课程中包含String没有多大价值,但让我们说这是一个例子。

参考

资源

答案 1 :(得分:4)

typeClass必须指向扩展UserType的内容(此处理程序类包含与数据库之间的映射)。