Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring/Hibernate:数据写入TX外部的DB_Spring_Hibernate_Transactions - Fatal编程技术网

Spring/Hibernate:数据写入TX外部的DB

Spring/Hibernate:数据写入TX外部的DB,spring,hibernate,transactions,Spring,Hibernate,Transactions,版本: 春季4.3.6 休眠:5.2.6 tx = session.beginTransaction(); Customer cust = session.get(Customer.class, "some id"); tx.commit(); cust.setName('Some Name'); // Not written to DB tx = session.beginTransaction(); tx.commit(); // Customer is updated in DB 现

版本: 春季4.3.6 休眠:5.2.6

tx = session.beginTransaction();
Customer cust = session.get(Customer.class, "some id");
tx.commit();

cust.setName('Some Name');
// Not written to DB

tx = session.beginTransaction();
tx.commit();
// Customer is updated in DB

现在,在上次开始/提交之后,客户已被更新。为什么?

如果不希望发生这种情况,则在配置数据源时或在spring属性中,需要将autocommit设置为false。

如果您将其与spring一起使用,则可能会有另一个transaction over方法或调用@transaction annotation之类的方法。嗯,实际上,我正在使用Struts2操作和OpenEntityManagerViewFilter。因此,惟一的事务性Springbean是DAO,它是使用@Autowired注入Struts2操作的。当从DAO中检索实体,并从action类中将属性更改为该实体时,更改实际上会写入DB。我不明白!很可能Hibernate会像回滚一样为您提交事务,即使您丢失了对该事务的引用那么Struts操作和DAOBean的最佳实践是什么?我应该让动作具有事务性吗?我可以向DAO添加一个合并方法,并在更新实体时调用该方法。