JPA использует `Enum` в качестве` @ Id` с `@ IdClass` - PullRequest
1 голос
/ 21 марта 2012

Я нашел форум с этой темой. Использование enum в качестве идентификатора

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

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 голосов
/ 21 марта 2012

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

1 голос
/ 04 февраля 2018

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

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

@Embeddable
class MyEntityId {

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

@Entity
class MyEntity {

    @EmbeddedId
    MyEntityId id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...