9.提交事务的时候报错:JBO-27023: Failed to validate all rows in a transaction。(应该是EO的验证没有通过,主键冲突之类的,和事务的设置应该没有关系)
但不知道具体是什么错,什么验证没有通过。加上下面的row的validate那一行,就会提示具体错误了。
before commiting its necessary to validate the row.. That will fire all validations of EO
13.Post Change:调用方式和commit()一样; vo.getApplicationModule().getTransaction().postChanges();就是把change(数据改动)post到数据库缓存中,
但是还没有commit();相当于在一个数据库的session中,执行了update操作但是不执行commit操作(这条数据是锁住的),这个时候如果在另一个数据库session中对同一条数据进行操作的话就不能执行成功,因为这条数据处于锁住状态,除非前面那个session执行了commit,这个session才能继续执行。如果前面那个session没有执行commit就直接关掉session了,那这条数据就锁住了。
post change的作用:基于同一个EO建了2个VO,正常如果一个vo在页面上数据进行了改动但没有commit的话,另外一个vo是查询不到的。但如果第一个vo改动后调用了postChange()方法,另外一个vo也就能在页面上查到了。它的作用相当于是把原来在weblogic缓存的数据放到了数据库缓存中。
post change和数据库session类似,如果用户在页面上输入各种数据,在popup里点击了save按钮,执行了post change(如果在post change后面也执行了commit不会有问题),这个时候非popup的主页面也能显示这条数据(因为用的同一个EO and post change),但是如果用户在主页面没有点击按钮执行commit而是直接关闭浏览器的话,这个session就被关掉了,修改的数据就都被锁了!这时就只能去数据库解锁了。。