Что означает @AttributeOverride?
в настоящее время я возвращаюсь (назад) к скорости с EJB, и пока я отсутствовал, он резко изменился (пока к лучшему). Тем не менее, я столкнулся с концепцией, с которой я борюсь, и хотел бы лучше понять, как она, похоже, используется в нашем (где я работаю, а не я и все голоса в моей голове) коде совсем немного.
вот пример, который я нашел в книге. Это часть примера, показывающего, как использовать @EmbeddedId
аннотация:
@Entity
public class Employee implements java.io.Serializable
{
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name="lastName", column=@Column(name="LAST_NAME"),
@AttributeOverride(name="ssn", column=@Column(name="SSN"))
})
private EmbeddedEmployeePK pk;
...
}
на EmbeddedEmployeePK
класс довольно простой @Embeddable
класс, который определяет пары @Columns
: lastName
и ssn
.
О, и я поднял этот пример из Enterprise JavaBeans 3.1 О'Рейли от Rubinger & Burke.
заранее спасибо за любую помощь вы можете дать мне.
5 ответов
это говорит о том, что атрибуты, составляющие встроенный идентификатор, могут иметь предопределенные (через явные или неявные сопоставления) имена столбцов. Используя @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
класс EmbeddedEmployeePK-это довольно простой @ Embeddable класс, который определяет пару @Columns: lastName и ssn.
не совсем EmbeddedEmployeePK
определяет пару свойства, которые затем сопоставляются столбцам. The @AttributeOverride
аннотации позволяют переопределить столбцы, к которым сопоставлены свойства внедренного класса.
прецедент для этого-когда встраиваемый класс используется в разных ситуациях, когда его имена столбцов различаются, и требуется некоторый механизм, позволяющий изменять эти сопоставления столбцов. Например, предположим, что у вас есть сущность, которая содержит два отдельных экземпляра одного и того же встраиваемого - они не могут сопоставляться с одинаковыми именами столбцов.
вы можете переопределить также другие свойства столбца (а не только имена).
Предположим, вы хотите изменить длину SSN на основе того, кто внедряет ваш компонент. Вы можете определить @AttributeOverride
для такого столбца:
@AttributeOverrides({
@AttributeOverride(name = "ssn", column = @Column(name = "SSN", length = 11))
})
private EmbeddedEmployeePK pk;
посмотреть "2.2.2.4. Встроенные объекты (ака компоненты)" в документации по аннотациям Hibernate.
для того, чтобы сохранить другие @Column
свойства (например,name
и nullable
) держите их на переопределенном колонки такие же как вы указали в исходном столбце.
JPA пытается сопоставить имена полей с именами столбцов в источнике данных, поэтому вы видите здесь Перевод между именем переменной поля к имени столбца в базе данных.