У меня есть следующие классы User и Address:
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" .. верно?
-Siva