以我java web app
(使用playframework
),我有一個Customer
具有Address
這樣映射JPA映射以除去孤實體
@Entity
class Customer extends Model{
@ManyToOne
Address address;
...
}
@Entity
class Address extends Model{
String addressline1;
...
}
我有一個setCustomerAddress(..)方法這需要用戶輸入,R etrieves從db中匹配地址或創建一個新地址,然後如果客戶地址爲空或不同,則設置輸入地址。
public static void setCustomerAddress(...){
Customer = Customer.findById(custId);
Address address = findOrCreateAddress(addressline1,...);
if ((customer.getAddress()==null) || (!customer.getAddress().equals(address))) {
customer.setAddress(address);
customer.save();
}
...
}
customer1創建Address1。 customer2輸入相同的Address1。
現在都有Address1;
id | addressline1 | addressline2 | country
----+--------------+--------------+---------
25 |apple st. | | US
id |name |address_id
----+--------------+------------
1 |jim |25
2 |roy |25
如果customer2表增加了一個addressline2,地址被認爲是不同的,所以一個新的地址是建立
地址表
id | addressline1 | addressline2 | country
----+--------------+--------------+---------
25 |apple st. | | US
26 |apple st. |richman's end | US
客戶表
id |name |address_id
----+--------------+------------
1 |jim |25
2 |roy |26
假設,customer1表通過添加與customer2相同的addressline2來更新他的地址,現在他的address_id p oints到的customer2 客戶表
id |name |address_id
----+--------------+------------
1 |jim |26
2 |roy |26
這留下一個地址記錄(25)的地址不屬於任何客戶。
這應該留在db?還是應該刪除?正確的做法是什麼?ManyToOne不允許任何orphanRemoval我猜。我必須在代碼中清除它,可能會做一些檢查這樣的孤獨實體?
任何指針將受到歡迎
Cascade =「all-delete-orphan」你在找什麼? http://docs.jboss.org/hibernate/core/3.3/reference/en/html/example-parentchild.html – lexicore
這是可能的多對一?我只能找到CascadeType.ALL – jimgardener