我有用戶和地址分類如下:爲什麼@OneToOne允許重複關聯?
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本身應該強加「唯一=真實」的條件..對吧?
-Siva
我面臨同樣的問題。 'OneToOne'應該重命名爲'OneToOneOnEntityLevel'。同樣,'JpaRepository.save()'應該是'jpaRepository.saveOrMerge()'。這兩件事可能會導致數據庫級別的數據損壞。 –