Пользовательская оболочка для ключа идентификатора - PullRequest
0 голосов
/ 03 сентября 2011

Я хочу обернуть идентификатор в пользовательский класс.Вот так

@Entity
@Table(name = "USERS")
public class User {
    @EmbeddedId
    UserId id;
}
@Embeddable
public class UserId implements Serializable {
    private Long value;
}

Проблема в автогенерации value для UserId.Что мне нужно сделать, чтобы @GeneratedValue на value работало?

Кстати, было бы здорово, если бы id автоматически инициализировался сам.

1 Ответ

1 голос
/ 04 сентября 2011

Насколько я знаю, Hibernate генерирует значения только для поля, помеченного как @Id.Я нашел этот пост, и ответ Харди поддерживает это.

Мы попытались сделать подобное и справились с этим через прослушиватель перед вставкой.Это было довольно сложно и не идеально.Также вы можете найти различное поведение на разных платформах.Использование последовательностей Oracle будет означать, что вам нужно назначить значение pre-insert (Hibernate делает выбор, чтобы получить значение, а затем вставку), но в MySQL поле с автоинкрементом присваивает значение, а hibernate делает вставку для генерации автоматически сгенерированногозначение, а затем выберите, чтобы узнать, какое значение было.

...