code:
dataService.save(entity); // PO, "inser t values(,,)" occured.
logger.debug("save entity: {}", entity);
entity.setProcessInstanceId(processInstanceId);
dataService.saveOrUpdate(entity); // No "update t set ..."其中,dataService实现了HibernateOperations(继承HibernateTemplate)
求指导,求扫盲。
dataService.save(entity); // PO, "inser t values(,,)" occured.
logger.debug("save entity: {}", entity);
entity.setProcessInstanceId(processInstanceId);
dataService.saveOrUpdate(entity); // No "update t set ..."其中,dataService实现了HibernateOperations(继承HibernateTemplate)
求指导,求扫盲。
dataService.save(entity); // VO--->PO--->DO?, "inser t values(,,)" occured.
logger.debug("save entity: {}", entity);
entity.setProcessInstanceId(processInstanceId);
dataService.update(entity); // No "update t set ..."
dataService.flush();// fixed! but not expected. please help me.
其中,dataService实现了HibernateOperations(继承HibernateTemplate)
给分,结贴。求来人。
请问,如何才能查看"事务状态"?
我个人认为表与实体的对应是不存在问题的,因为调用
dataService.flush()方法后,能打印出符合预期的语句:
Hibernate: update be.oa_leave set PROCESS_INSTANCE_ID=? where ID=?
不过当前确定事务已提交了。
测试数据:
(mysql> select * from oa_leave;
+----+---------------------+---------+---------------------+---------------------+------------+----------------------------+-------
--------------+---------------------+---------------------+
| ID | PROCESS_INSTANCE_ID | USER_ID | START_TIME | END_TIME | LEAVE_TYPE | REASON | APPLY_
TIME | REALITY_START_TIME | REALITY_END_TIME |
+----+---------------------+---------+---------------------+---------------------+------------+----------------------------+-------
--------------+---------------------+---------------------+
| 1 | NULL | admin | 2013-09-06 08:30:00 | 2013-09-06 17:30:00 | 事假 | 测试Activiti流程 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 2 | NULL | admin | 2013-09-05 08:30:10 | 2013-09-05 17:30:00 | 事假 | 测试Activiti Engine | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 3 | NULL | admin | 2013-09-05 18:06:50 | 2013-09-05 18:06:50 | 事假 | 测试请假 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 4 | NULL | admin | 2013-09-05 18:27:30 | 2013-09-05 18:27:30 | 事假 | 测试 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 5 | NULL | admin | 2013-09-05 18:41:19 | 2013-09-05 18:41:19 | 事假 | 测试 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 6 | NULL | admin | 2013-09-05 18:43:48 | 2013-09-05 18:43:48 | 事假 | 测试--entity流程数据不同步 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 7 | NULL | admin | 2013-09-05 19:08:09 | 2013-09-05 19:08:09 | 事假 | 测试 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 8 | NULL | admin | 2013-09-06 08:40:24 | 2013-09-06 08:40:25 | 调休 | 测试工作流引擎 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 9 | NULL | admin | 2013-09-06 09:08:02 | 2013-09-06 09:08:02 | 事假 | 测试:
数据不同步 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 10 | NULL | admin | 2013-09-06 09:38:50 | 2013-09-06 09:38:50 | 事假 | 测试 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 11 | NULL | admin | 2013-09-06 10:07:26 | 2013-09-06 10:07:26 | 事假 | 测试 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 12 | 2205 | admin | 2013-09-06 11:21:49 | 2013-09-06 11:21:49 | 事假 | 测试 | 2013-0
9-06 11:21:56 | 2013-09-06 11:21:56 | 2013-09-06 11:21:56 |
| 13 | 2305 | admin | 2013-09-06 11:24:22 | 2013-09-06 11:24:09 | 事假 | 测试 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 14 | NULL | admin | 2013-09-06 11:27:20 | 2013-09-06 11:27:20 | 事假 | 测试 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 15 | 2505 | admin | 2013-09-06 13:20:03 | 2013-09-06 17:30:00 | 事假 | 测试Activiti | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 16 | 2512 | admin | 2013-09-06 13:59:38 | 2013-09-06 13:59:27 | 事假 | 测试 | 0000-0
0-00 00:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+----+---------------------+---------+---------------------+---------------------+------------+----------------------------+-------
--------------+---------------------+---------------------+)我个人认为流程是这样的:
dataService.save(entity);
entity是前台传递过来的参数。
由Transient--->Persistent,执行完后,
1°若Sessionn关闭,持久化上下文失效。Persistent--->Detach。2°若Session未关闭,Hibernate在set方法调用时,应该自动脏检查才对。事务如下:
[...]
<prop key="connection.autocommit">true</prop>
[...]
这样配置不对,是吗?
只是Session关闭,会由Persistent Object--->Detached Object。
我们可以用update(),lock()方法将其重新绑定到持久化上下文。变迁到Persistence Object.
我个人认为,flush()只是强制将变化传播到数据库中。触发了事务提交操作。
期望的场景是,Hibernate能自动将变化传播到数据库中,而不需要强制的手工刷新。