У меня есть классы пользователя и адреса следующим образом:
class User
{
...
...
@OneToOne( cascade=CascadeType.ALL)
@JoinColumn(name="addr_id")
private Address address;
}
class Address
{
...
...
@OneToOne(mappedBy="address")
private User user;
}
Здесь мое предположение с этой моделью домена Я могу связать один адрес только с одним пользователем (user.addr_id должен быть уникальным).
Но с этой моделью домена я могу создать несколько пользователей и связать их с тем же адресом.
User u1 = new User();
//set data
Address addr1 = new Address();
//set data
u1.setAddress(addr1);
...
session.save(u1);
- > это создание одной записи адреса с помощью addr_id = 1 и вставка одной пользовательской записи в пользовательскую таблицу с помощью addr_id = 1. Хорошо.
Опять же,
User u2 = new User();
//set data
Address addr1 = (Address) session.load(Address.class, 1);
//set data
u2.setAddress(addr1);
...
session.save(u2);
- > Это создает вторую запись пользователя и связывается с существующим адресом с помощью addr_id = 1, что нежелательно.
Я могу использовать @OneToOne (..) @JoinColumn (name= "addr_id", unique = true), чтобы предотвратить это. Но какая разница в использовании @OneToOne, а не @ManyToOne (.., unique = true).
@OneToOne сам должен наложить условие "unique = true". right?
-Siva