2012-03-21 7 views
1

このテーマに関するフォーラムが見つかりました。 Using enum as id「Enum」を「@ IdClass」と「@ 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

リンクされた問題を読んでみませんか?それはspec(2.1.4)を引用し、あなたがEnum型のidフィールドを持つことはできません。 IdClassの型がクラスの型と一致しなければならないので、(無効な)IdClassを持っていても問題ありません。したがって、JPA仕様の一部ではないため、ベンダー固有の動作が残っています。

+1

同じ効果を得るために@EmbeddedIdを使用している、これは2016年にまだ有効ですか? – narko

+0

Hibernate 4の最新バージョンではまだ有効です。 – Tadhg

1

Hibernate 4ではIdClass@IdとしてEnumを使用できますが、これは順序としてのみです。列挙を追加するすべての@Convertタグは無視されます。あなたは何ができるか

@Embeddable 
class MyEntityId { 

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

@Entity 
class MyEntity { 

    @EmbeddedId 
    MyEntityId id; 
} 
関連する問題