使用JPA,我们可以将枚举定义为实体的ID吗?

我尝试了以下方法:

public enum AssetType {
   ....
}

@Entity
@IdClass(AssetType.class)
public class Adkeys {

   private AssetType type;

   @Id
   @Enumerated(EnumType.STRING)
   @Column(nullable = false)
   public AssetType getType() {
      return type;
   }

}

使用OpenJPA,它提示:



所以我的问题是:
  • 我们应该能够在JPA上将枚举用作ID的实体吗? (即OpenJPA中存在错误)
  • 还是我在某个地方犯了错误?
  • ,是否有解决此问题的方法?
  • 最佳答案

    JPA规范没有说这是可能的:



    如果您确实想要给定实体具有编译时固定数量的记录,则可以使用Stringint主键并为其分配AssetType.FOO.name()AssetType.FOO.ordinal()
    此处的不可移植意味着某些持久性提供程序可能支持其他功能,但可能不适用于其他提供程序。与枚举一样-如果持久性提供程序对此有特殊支持,则它不会尝试实例化它,而是在检查class.isEnum()之后专门对其进行处理,然后它可能会起作用。但是似乎您的持久性提供程序没有执行此操作。

    10-01 06:04