问题描述
我现在用Hibernate碰到了一个问题。现在在做一个订购服务的程序,有1个会员卡,会员卡可能是企业用户,所以该会员卡对应了多个用户,我在订购服务的时候需要为这个企业用户的会员订购统一的服务,那么就需要为该会员卡上的每个用户添加一条订购服务数据。现在我在service里面的add函数中先查询出该会员卡下的所有用户,然后为每个用户添加相同的服务,调用的是dao的add函数,函数中的代码是getHibernateTemplate().save(o);在service的add函数里面循环调用dao中的add函数就会报错,说是改变了主键,然后我在dao中的add函数里面把session的缓存清理了就不报错了。可是那样一来,spring就无法进行实物管理了。因为flush以后,事务就提交了。不知道有没有解决方法。谢谢大家了。我在service里面进行业务逻辑的处理应该不是错的吧?难道说要把这些操作放在dao中的同一个事物里面进行处理????
解决方案
解决方案二:
不知道你在说什么。
解决方案三:
如果在Action里面循环不行,就在Dao里试一试,还有你再仔细检查hibernate,那里面的主键设置,看自增长是不是native
解决方案四:
lz的问题没遇到过,而且描述的也不清楚,看下来可能是hibernatepovo状态没有搞清楚,可以贴下代码
解决方案五:
Hibernate批量更新不是优势
解决方案六:
http://docs.jboss.org/hibernate/stable/core/reference/en/html/batch.html#batch-inserts方案在于自己。
解决方案七:
实际上当我知道HIBERNATE可以用SQL的时候我就不再用他本身的方法进行批量更新了实际上你把你查出来的数据需要修改的部分修改完再将sessionclearflush就可以了
解决方案八:
不是flush的问题,是你主键设置的问题。主键不要用业务键,用自增长的试试。