解决方案 »

  1.   

    如果他的都不好用了,那就自己封装吧,以前用hibernate的时候都是save前先merge一下
      

  2.   

    save内部是由persist和merge支持的,一直只调用persist,是不是所保存对象状态不对?
      

  3.   

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

  4.   

    spring data jpa 让人感觉就是白高心了一场;
    我测试一对多关联映射时,也被这个save()搞得莫名其妙在同一个事务下,明明在一的一端先save,然后再保存多的一端,
    就是提示org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
    但是在一的一端save之后 先load一下,再保存多的一端,一起就顺利了。
    也不能参考 纯JPA中的 @ManyToOne中加(cascade = {CascadeType.ALL})
    否则在一个事务下 多的一端加几次 一的一端就会重复几次插入数据出现这些麻烦应该就是楼主说的spring data内部 save好像一直都是执行persist()方法
    考虑放弃了
      

  5.   

    Spring Data JPA 的保存操作, 是根据状态来判断的. 如果没有经过load的过程, Spring Data JPA 都认为该对象是游离状态会执行保存操作; 如果需要更新必须先Load再设置属性后再Save.   这点确实有点小郁闷, 不知道大家有没有好点的方法来解决这个问题.
    我看了下Spring Data JPA的例子, 在做更新操作时用了DTO对象进行数据传递, 在保存时再把DTO赋值给Domain对象..
      

  6.   

    springdata代码下载:http://www.zuidaima.com/share/search.htm?key=springdata
      

  7.   

    级联策略  cascade = {CascadeType.REFRESH}
      

  8.   

    User实体里@OneToMany( cascade = {CascadeType.REFRESH} )
    List <Role> roles;