Есть две сущности: User
и Address
. Они в моем случае должны быть связаны связью один-к-одному, то есть в одной из них должна быть ссылка на другую: либо в классе User
должно быть поле Address address
, к которому мы пишем @JoinColumn
, а со стороны адреса делаем mappedBy
, либо же в классе Address
поле User user
и проделываем то же самое. Так вот, как именно определить, какая сущность при односторонней связи является как бы явно зависимой от другой, а какая не должна знать о своей связи с ней?
Вы пишите:
Они в моем случае должны быть связаны связью один-к-одному, то есть в одной из них должна быть ссылка на другую
, а затем:
либо в классе User должно быть поле Address address, к которому мы пишем @JoinColumn, а со стороны адреса делаем mappedBy
Это уже двунаправленное отображение (bidirectional).
Так вот, как именно определить, какая сущность при односторонней связи является как бы явно зависимой от другой, а какая не должна знать о своей связи с ней?
Возможный способ отображения связи один-к-одному с помощью внешнего ключа:
Address:
@Entity
class Address { /* impl */ }
User:
@Entity
class User
{
@OneToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.PERSIST)
@JoinColumn(unique = true)
protected Address homeAddress;
}
Разумеется, это не полное определение классов-сущностей, я указал только важные в данном контексте детали.
Пример использования:
var user = new User("...");
var addr = new Address("...");
user.setHomeAddress(addr);
em.persist(user);
Сохранение addr
произошло транзитивно при сохрании user
.
Так вот, при одностороннем отображении мы не "трогаем" вторую сущность (заметьте отсутствие аннотаций в классе Address), соответственно не возникает вопроса, вроде, "где писать mappedBy".
Обе таблицы должны иметь поля для ссылок друг на друга, если заранее неизвестно за какой конец этого relation будут дергать БД.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Можно ли заполнить массив с клавиатуры с помощью foreach? Суть какая: создаю список и хочу заполнить данными с клавиатуры, пока не введу "стоп-слово"
Вечер добрый, простите за тупость, в java меньше 3-х недель и немного не понимаю как добавить переменную в код, чтобы сортировка была именно на столько...
Не погу понять, как сделать,чтобы при нажатии кнопки create pet можно было создать Pet
Мне нужно реализовать сетевое взаимодействие приложений на Android (Java) и Windows (C#)Я испытываю трудности с написанием серилизатора на разных языках...