2012-03-21 7 views
1

Я нашел форум с этой темой. Using enum as idJPA используя `Enum` как` @ Id` с `@ IdClass`

Но я не мог уверен, что смогу это сделать или нет. Я думаю, что мое дело немного другое.

enum Type { 
} 

class MyEntityId { 
    String type; 
    String key; 
} 

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

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

    @Id 
    String key; 
} 

Действительно ли это законно по спецификации?
Если это так, могу ли я не беспокоиться о конкретном поведении конкретного поставщика?

ответ

2

Почему бы не прочитать связанную проблему? Он цитирует спецификацию (2.1.4) и говорит «НЕТ». Вы не можете иметь поля id типа Enum; не имеет значения, что у вас есть некорректный IdClass (поскольку типы IdClass должны соответствовать типам класса). Таким образом, он не является частью спецификации JPA, поэтому вы остаетесь с поведением конкретного поставщика.

+1

Является ли это по-прежнему действует в 2016 году? – narko

+0

Он по-прежнему действует на последней версии Hibernate 4. – Tadhg

1

В Hibernate 4 вы можете использовать Enum как @Id в IdClass, но только как ординарный. Любые @Convert теги, которые вы добавляете, перечисление будет проигнорировано.

Что вы можете сделать, это использовать @EmbeddedId, чтобы получить тот же эффект

@Embeddable 
class MyEntityId { 

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

@Entity 
class MyEntity { 

    @EmbeddedId 
    MyEntityId id; 
} 
Смежные вопросы