作者hera1016 ()
看板java
标题[问题] JPA做一对多UPDATE
时间Sun Jan 30 18:12:29 2011
我使用的classes都是JPA透过OR-mapping自动产生的
以良葛格的"一对多+双向关联"文章举例说明 可能会比较容易描述我的问题
http://caterpillar.onlyfun.net/Gossip/EJB3Gossip/BidirectionalAssociation.html
(不过我的scenario与此篇文章有一点点不同
我的"一对多"是"上游对下游"的关系
即资料存入DB时 一定先有room 才有多个user)
我的关联性设定跟良葛格的一样
无论是 @OneToMany 或 @ManyToOne 都有加上 CascadeType.ALL 的属性
不过因为资料顺序性的限制
有在下游(user)的FK加上 insertable=false, updatable=false
另外我的scenario是只会对上游的table做操作
目前从上游执行 insert & delete 都没问题
唯独update有点怪(update是利用JPA的merge)
假设现在DB中已有的资料是 1 room 对应到 3 users
要update的object是 1 room 对应到 4 users
则DB中的user会自动加一笔新资料
但如果要update的object是 1 room 对应到 2 users
则DB中的user没变化
所以很怪的点是 下游的table 会自动增加 却不会自动删除
不知道是不是我什麽地方少做设定 @@
我查了一下 在JPA2.0中 CascadeType.DELETE_ORPHAN 似乎可以达到我的需求
可惜我用的环境只相容JPA1.0
不知道版友还有没有其它的解决方式呢?
先说声感谢唷<(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.85.20
1F:→ infinitlee:直接用delete method..简单的讲就是@Id 的field 不为 01/30 21:18
2F:→ infinitlee:null就做update,反之就是做insert 01/30 21:20
3F:→ ewn:建议你把mapping和上游操作部分的程式码贴上来,比较清楚 01/31 23:55