【发布时间】:2011-09-17 06:55:59
【问题描述】:
在我的java web app(使用playframework)中,我有一个Customer 有一个像这样映射的Address
@Entity
class Customer extends Model{
@ManyToOne
Address address;
...
}
@Entity
class Address extends Model{
String addressline1;
...
}
我有一个 setCustomerAddress(..) 方法,它接受用户输入,r 从 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。
现在两者都有地址 1;
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指向customer2的地址 客户表
id |name |address_id
----+--------------+------------
1 |jim |26
2 |roy |26
这会留下不属于任何客户的地址记录 (25)。
这应该留在数据库中吗?还是应该删除?哪种做法是正确的?我猜ManyToOne不允许任何孤儿删除。我是否必须在代码中清理它,可能正在检查这些孤立的实体?
欢迎指点
【问题讨论】:
-
是 cascade="all-delete-orphan" 你在找什么? docs.jboss.org/hibernate/core/3.3/reference/en/html/…
-
多对一是否可行?我只能找到 CascadeType.ALL
标签: java jpa playframework