Какое использование @Embedded
и @Embeddable
В спящем режиме? Поскольку каждый пример, который я нашел в Интернете, вставляет данные внутри одной таблицы и делает это, используя два разных класса. Я хочу сказать, что если я использую одну таблицу, я могу отобразить все столбцы внутри одного класса, тогда зачем мне использовать другой класс. и если мы используем две разные таблицы, то существует соотношение one-to-one
и one-to-many
спящего режима.
Почему мы используем @Embeddable In Hibernate
Ответ 1
В Hibernate есть два типа объектов
1. Объект ценности
2. Объекты
Объекты Value - объекты, которые не могут стоять в одиночестве. Возьмите Address
, например. Если вы скажете адрес, люди спросят, чей адрес это. Поэтому он не может стоять в одиночестве.
Объекты сущности - это те, кто может стоять в одиночестве, например College
и Student
.
Таким образом, в случае объектов с ценными данными предпочтительным способом является их внедрение в объект сущности.
Чтобы ответить, почему мы создаем два разных класса: во-первых, это концепция OOPS, которая должна иметь свободную связь и высокую степень сцепления между классами. Это означает, что вы должны создавать классы только для специализированных целей. Например, ваш класс Student
должен иметь только информацию, связанную с Student
.
Вторая точка заключается в том, что, создавая разные классы, вы продвигаете повторное использование.
Когда мы определяем объект value для класса сущности, мы используем @Embeddable
.
Когда мы используем объект типа значения в классе сущности, мы используем @Embedded
Ответ 2
Предположим, у нас есть таблица сотрудников, аннотированная @entity, а сотрудник имеет адрес, поэтому здесь я не хочу создавать две таблицы, то есть сотрудник и адрес, я просто хочу создать только одну таблицу, то есть сотрудник, а не таблицу адресов, тогда нам нужно объявить экземпляр Address в Employee и добавить @embedable аннотация поверх класса Address, так что в итоге мы получаем таблицу employee с записями и адресами, а также в таблице с одним сотрудником
Ответ 3
Один объект может быть встроен в другой объект. Атрибуты объекта могут быть общими атрибутами более чем одного объекта. В этом случае может быть один внедряемый объект. И этот внедряемый объект может быть встроен в несколько объектов.
Рассмотрим пример. У нас есть один объект Animal
, который имеет атрибуты name
и location
. Теперь два разных объекта Lion
и Elephant
могут иметь атрибуты Animal
, просто вставляя объект Animal
. Мы можем переопределить атрибуты. В объекте Animal
присутствует атрибут location
, а в Elephant
присутствует атрибут place
. Итак, с помощью @AttributeOverrides
мы можем сделать, как показано ниже:
@AttributeOverrides({ @AttributeOverride(name = "location", column = @Column(name = "place")) })