Который аннотация должна я использовать: @IdClass или @EmbeddedId

120
задан Harshal Patil 28 January 2016 в 04:23
поделиться

2 ответа

Я полагаю, что @EmbeddedId является, вероятно, более подробным, потому что с @IdClass Вы не можете получить доступ ко всему объекту первичного ключа, использующему оператор доступа к полю. Используя @EmbeddedId можно сделать как это:

@Embeddable class EmployeeId { name, dataOfBirth }
@Entity class Employee {
  @EmbeddedId EmployeeId employeeId;
  ...
}

Это дает ясное понятие полей, которые делают составной ключ, потому что они все агрегированы в классе, который является канавкой, к которой получают доступ, оператор доступа к полю.

Другим различием с @IdClass и @EmbeddedId является когда дело доходит до записи HQL:

С @IdClass Вы пишете:

select e.name from Employee e

и с @EmbeddedId необходимо записать:

select e.employeeId.name from Employee e

необходимо записать больше текста для того же запроса. Некоторые могут утверждать, что это отличается от большего количества естественного языка как тот, продвинутый [1 110]. Но большинство времен, понимая прямо от запроса, что данное поле является частью составного ключа, имеет неоценимую справку.

81
ответ дан Kurt Du Bois 24 November 2019 в 01:41
поделиться

Я обнаружил экземпляр, где я должен был использовать EmbeddedId вместо IdClass. В этом сценарии существует объединяющая таблица, которой определили дополнительные столбцы. Я попытался решить это использование задач IdClass для представления ключа объекта, который явно представляет строки в объединяющей таблице. Я не мог получить его прокладывание себе путь. К счастью "Персистентность Java С В спящем режиме", выделили раздел этой теме. Одно предлагаемое решение было очень похоже на мой, но оно использовало EmbeddedId вместо этого. Я смоделировал свои объекты после тех в книге, она теперь ведет себя правильно.

17
ответ дан laz 24 November 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: