Подтвердить что ты не робот

Что означает @AttributeOverride?

В настоящее время я прихожу (назад), чтобы ускориться с EJB, и пока я отсутствовал, он резко изменился (пока к лучшему). Тем не менее, я столкнулся с концепцией, с которой я борюсь, и хотел бы лучше понять, поскольку она, кажется, используется в нашей (где я работаю, а не мне и всем голосах в моей голове) код совсем немного.

Вот пример, который я нашел в книге. Это часть примера, показывающего, как использовать аннотацию @EmbeddedId:

@Entity
public class Employee implements java.io.Serializable
{
    @EmbeddedId
    @AttributeOverrides({
        @AttributeOverride(name="lastName", [email protected](name="LAST_NAME"),
        @AttributeOverride(name="ssn", [email protected](name="SSN"))
    })

    private EmbeddedEmployeePK pk;

    ...
}

Класс EmbeddedEmployeePK - довольно простой класс @Embeddable, который определяет пару @Columns: lastName и ssn.

О, и я снял этот пример с O'Reilly Enterprise JavaBeans 3.1 Rubinger и Burke.

Заранее благодарим за любую помощь, которую вы можете мне дать.

4b9b3361

Ответ 1

Говорят, что атрибуты, составляющие встроенный идентификатор, могут иметь предопределенные (через явные или неявные сопоставления) имена столбцов. Используя @AttributeOverride, вы говорите: "игнорируйте другую информацию, которую вы имеете в отношении того, в каком столбце она хранится, и используйте тот, который я укажу здесь".

Ответ 2

AttributeOverride

В классе UserDetails я переопределил homeAddress & officeAddress с Address

Этот один адрес POJO будет действовать для двух таблиц в БД.

DB:

Table1      Table2
STREET_NAME HOME_STREET_NAME
CITY_NAME   HOME_CITY_NAME
STATE_NAME  HOME_STATE_NAME
PIN_CODE    HOME_PIN_CODE

Ответ 3

Класс EmbeddedEmployeePK - довольно простой класс @Embeddable, который определяет пару @Columns: lastName и ssn.

Не совсем - EmbeddedEmployeePK определяет пару свойств, которые затем отображаются в столбцы. Аннотации @AttributeOverride позволяют вам переопределять столбцы, для которых отображаются свойства внедренных классов.

Вариант использования для этого заключается в том, когда вложенный класс используется в разных ситуациях, где его имена столбцов различаются, и требуется какой-то механизм, чтобы вы могли изменять эти сопоставления столбцов. Например, предположим, что у вас есть сущность, которая содержит два отдельных экземпляра одного и того же встроенного файла - они не могут сопоставляться с одинаковыми именами столбцов.

Ответ 4

Вы можете переопределить и другие свойства столбца (а не только имена).
Предположим, что вы хотите изменить длину SSN на основе того, кто встраивает ваш компонент. Вы можете определить @AttributeOverride для столбца следующим образом:

@AttributeOverrides({
    @AttributeOverride(name = "ssn", column = @Column(name = "SSN", length = 11))
})
private EmbeddedEmployeePK pk;

См. "2.2.2.4. Встроенные объекты (ака компоненты)" в документации по аннулированию Hibernate.

Чтобы сохранить другие свойства @Column (такие как name и nullable), сохраните их в переопределенном столбце так же, как указано в исходном столбце.

Ответ 5

JPA пытается сопоставить имена полей именам столбцов в источнике данных, поэтому вы видите здесь перевод между именем переменной поля и именем столбца в базе данных.