当前位置: 代码迷 >> J2EE >> SpringData JPA 中的更新操作遇到有关问题,请问
  详细解决方案

SpringData JPA 中的更新操作遇到有关问题,请问

热度:564   发布时间:2016-04-21 23:22:37.0
SpringData JPA 中的更新操作遇到问题,请教!
我的项目使用的是SpringMVC+Spring+HibernateJPA+SpringDataJPA,
增、删、查全都没问题,但是在更新的时候却遇到问题了。

更新的处理流程是这样的:
1.用户发送更新操作的请求到Controller层,Controller层收集数据绑定到实体对象中(User)
2.调用Service层方法,把刚刚数据绑定的User对象传递进去
3.调用Dao层的save方法,保存。

这里有个问题:修改User的信息时,会自动把其中的List<Role>所关联的多对多关系删除掉(该属性没有设置级联操作)

我查了查问题,是因为User对象在被执行save时,该对象不是一个受托管的状态(它是被Controller自动绑定填充的对象)所以导致了List<Role>集合的数据被删掉。(如果在save之前先find一下把实体查出来,就不会删除List<Role>集合的数据了)

但问题是Dao层并不是我自己写的,是由SpringDataJPA自动生成的。它只提供了一个save方法,并没有update方法。按理说在执行SpringData的save方法时,它应该能根据实体对象的状态判断是执行JPA的persist()方法还是执行merge()方法,但是这里好像一直都是执行persist()方法,一直都把它当作新建操作来做的。

我看了看别人做的实例,也是这么来写的Controller的实体,直接调用Service,然后调用Dao更新。中间也没有什么其他的操作(比如再find一次),但是别人的都挺好,怎么就我这个有问题呢!

请教啊,这个问题搞了一整天了,头疼死了
JPA Spring?Data?JPA Spring

------解决方案--------------------
如果他的都不好用了,那就自己封装吧,以前用hibernate的时候都是save前先merge一下
------解决方案--------------------
save内部是由persist和merge支持的,一直只调用persist,是不是所保存对象状态不对?


------解决方案--------------------
你当前save的对象不是通过Dao查出来的么?这里面没有包含List<Role>的信息(也就是这个集合为空)是嘛?