JPA使用`Enum`作为`@ Id`和`@ IdClass`

时间:2012-03-21 08:59:20

标签: jpa

我找到了一个有这个主题的论坛。 Using enum as id

但我无法确定我能否做到。我认为我的情况有点不同。

enum Type {
}

class MyEntityId {
    String type;
    String key;
}

@Entity
@IdClass(MyEntityId.class)
class MyEntity {

    @Enumerated(EnumType.String)
    @Id
    Type type;

    @Id
    String key;
}

这是否符合规范? 如果是,我可以不担心供应商的具体行为吗?

2 个答案:

答案 0 :(得分:2)

为什么不阅读链接的问题?它引用了规范(2.1.4)并且说不,你不能有枚举类型的id字段;你有一些(无效的)IdClass并不重要(因为IdClass的类型必须匹配类的类型)。所以它不是JPA规范的一部分,所以你留下了特定于供应商的行为。

答案 1 :(得分:1)

在Hibernate 4中,您可以在@Id中使用枚举作为IdClass,但仅作为序数使用。添加枚举的任何@Convert标记都将被忽略。

您可以使用@EmbeddedId来获得相同的效果

@Embeddable
class MyEntityId {

    @Enumerated(EnumType.String)
    Type type;
    String key;
}

@Entity
class MyEntity {

    @EmbeddedId
    MyEntityId id;
}