我现在用Hibernate碰到了一个问题。现在在做一个订购服务的程序,有1个会员卡,会员卡可能是企业用户,所以该会员卡对应了多个用户,我在订购服务的时候需要为这个企业用户的会员订购统一的服务,那么就需要为该会员卡上的每个用户添加一条订购服务数据。现在我在service里面的add函数中先查询出该会员卡下的所有用户,然后为每个用户添加相同的服务,调用的是dao的add函数,函数中的代码是getHibernateTemplate().save(o);在service的add函数里面循环调用dao中的add函数就会报错,说是改变了主键,然后我在dao中的add函数里面把session的缓存清理了就不报错了。可是那样一来,spring就无法进行实物管理了。因为flush以后,事务就提交了。不知道有没有解决方法。谢谢大家了。我在service里面进行业务逻辑的处理应该不是错的吧?难道说要把这些操作放在dao中的同一个事物里面进行处理????

解决方案 »

  1.   

    如果在Action里面循环不行,就在Dao里试一试,还有你再仔细检查hibernate,那里面的主键设置,看自增长是不是 native
      

  2.   

    lz的问题没遇到过,而且描述的也不清楚,
    看下来可能是hibernate po vo状态没有搞清楚,
    可以贴下代码
      

  3.   

    http://docs.jboss.org/hibernate/stable/core/reference/en/html/batch.html#batch-inserts方案在于自己。
      

  4.   

    实际上当我知道HIBERNATE可以用SQL的时候我就不再用他本身的方法进行批量更新了
    实际上你把你查出来的数据需要修改的部分修改完再将session clear flush就可以了 
      

  5.   

    不是flush的问题, 是你主键设置的问题。主键不要用业务键,用自增长的试试。