Spring+Hibernate事务问题?

wnjer 2007-01-31 03:23:33
Spring打开事务后,如下代码:
// service方法
public void updateX() {
Shiiresaki x = getKizaiUtilityDao().getX();
x.setBushoMei("aaaaaa");
}
我并没有显示的调用
getKizaiUtilityDao().updateX(x);
(即 getHibernateTemplate().update(x))
但,"aaaaaa"同样被更新到数据库中了。
但不打开事务却不会。

望高手指点,如何让其不自动更新!!!
...全文
261 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xper07 2007-02-01
  • 打赏
  • 举报
回复
你大概对Hibernate的dirty checking机制不甚了解,update()方法只能用于更新detached object,所有persistent object都不需要显示调用update(),Hibernate自动会更新。此外,也没有办法让Hibernate不进行dirty check。至于你那个事务的问题,我不知道你是怎么配置事务属性的,其实只要session当中有脏数据,即使没有事务,它也会进行更新的。
wnjer 2007-02-01
  • 打赏
  • 举报
回复
public void updateX() {
Shiiresaki x = getKizaiUtilityDao().getX();
x.setBushoMei("aaaaaa");
}
以上代码,我在不开事务的情况下,好像并不会自动更新。
wnjer 2007-02-01
  • 打赏
  • 举报
回复
谢谢回复。
是这样的,我们要插入一条新数据,而这条新数据与已有的某一条数据几乎是一样的,
所以
x = getX();
x.setA(new data);
save(x); // 无法插入一条数据
在没有开事务的情况下正常,但打开事务后,就无法插入了。

当然如果对x进行克隆则没有什么问题,
x = BeanUtils.cloneBean(getX);
x.setA(new data);
save(x); // 正常
但这样我要改很多代码。

我的事务配置:
<bean id="kizaiTxManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="kizaiSessionFactory" />
</bean>
<tx:advice id="kizaiTxAdvice"
transaction-manager="kizaiTxManager">
<tx:attributes>
<tx:method name="*" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="kizaiTxAdvice"
pointcut="execution(* org.opencarp.kizai.service.*.set*(..))" />
</aop:config>
aChinese 2007-02-01
  • 打赏
  • 举报
回复
没任何问题, 你既然不希望更新,为什么要x.setBushoMei("aaaaaa");
wnjer 2007-01-31
  • 打赏
  • 举报
回复
spring这样设计是乎有其道理,
但我希望只有我update(x)后,它才更新到数据库,不知如何设置。
wnjer 2007-01-31
  • 打赏
  • 举报
回复
不是事务的配置问题(已配置成功)
现在是我在我的service层的方法中(事务管理的函数):
public void updateX() {
Shiiresaki x = getKizaiUtilityDao().getX();
x.setBushoMei("aaaaaa");
}
以上是全部代码,我就是直接从Dao层取出一个POJO,然后对其值更改一下。
函数直接返回。
但 "aaaaaa" 这个新值,同样被更新到了数据库。
yunxiang 2007-01-31
  • 打赏
  • 举报
回复
代码不全。
不太明白

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧