【问题标题】:How to use custom type in JPA column?如何在 JPA 列中使用自定义类型?
【发布时间】:2010-09-30 07:36:45
【问题描述】:

我有一堂课:

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

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

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    嗯,有很多方法:

    • @Embeddable注释Email类,并有:

       @Embedded
       private Email email;
      
    • 声明自定义值类型 - 参见here(使用@Type

    【讨论】:

    • @Bozho 我想知道提出的第二种方法是否可以仅使用 JPA(没有特定于 Hibernate 的注释)?
    • @Vincenzo 没有。看到这个答案stackoverflow.com/questions/3628344/…
    • @Bozho 我不能通过 setter/getter 实现相同的行为吗?
    • 这比使用可嵌入选项更难看。 :) 但你可以
    • 我已经成功地将hibernate自定义类型与hibernate和spring一起使用。现在我们将 JPA 用于新实体,并希望 hibernate 仍然可以支持定义了自定义类型的旧 hbm 文件。但是我得到了同样的例外。我们所有旧的休眠映射都是外部化的,但新的 JPA 实体正在使用注释。任何帮助表示赞赏。谢谢
    【解决方案2】:

    你可以让电子邮件成为一个实体,它会起作用……但它的效率很低。

    @Entity
    public class Email {
      ...
    }
    

    或者您可以从Email 切换到String,它会起作用。 (无论如何包装一个字符串有什么意义?)

    您可以阅读 this tutorial 关于 Hibernate 中的自定义用户类型(因为您已标记它)。

    或者你可以像 Bozho 说的那样使用@Embebbed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多