Java 如何在JPA列中使用自定义类型?

Java 如何在JPA列中使用自定义类型?,java,hibernate,jpa,Java,Hibernate,Jpa,我有一门课: public class Email { private String name; private String domain; public String toString() { return name + "@" + domain; } } 我想在JPA专栏中使用它: @Entity public class User { @Id private Integer id; private Email email; } Hibernate是

我有一门课:

public class Email {
  private String name;
  private String domain;
  public String toString() {
    return name + "@" + domain;
  }  
}
我想在JPA专栏中使用它:

@Entity
public class User {
  @Id private Integer id;
  private Email email;
}
Hibernate是这么说的:

org.hibernate.MappingException: Could not determine type for: com.XXX.Email

如何让它理解我的自定义类型。我认为它非常简单,但在文档中找不到。

你可以将电子邮件作为一个实体,它会工作……但它非常无效

@Entity
public class Email {
  ...
}
或者你也可以从
电子邮件
切换到
字符串
,这样就可以了。(无论如何,包装一根绳子有什么意义?)

您可以在Hibernate中阅读自定义用户类型(因为您标记了它)


或者你可以像波佐所说的那样使用
@embebebed

嗯,有很多方法:

  • @embeddeble
    注释
    电子邮件
    类,并具有:

     @Embedded
     private Email email;
    
  • 声明自定义值类型-请参阅(使用
    @type


@Bozho我想知道提出的第二种方法是否可能只使用JPA(没有Hibernate特定的注释)?@Vincenzo否。看到这个答案@Bozho我不能通过setter/getter实现同样的行为吗?这比使用可嵌入选项更难看。:)但是您已经成功地将hibernate自定义类型与hibernate和spring一起使用。现在我们正在为新实体使用JPA,希望hibernate仍然能够支持定义了自定义类型的旧hbm文件。然而,我得到了同样的例外。我们所有旧的hibernate映射都是外部化的,但是新的JPA实体正在使用注释。感谢您的帮助。谢谢