Jfinal事务锁的机制是否有?就是防止脏读

bing_chuan 发布于 2013/11/27 15:56
阅读 1K+
收藏 1

@JFinal 你好,想跟你请教个问题:


因为使用hibernate比较多,我知道在大并发的网站防止脏数据、更新丢失等一系列问题都需要考虑的,

比如说同时并发2个线程执行同一个对象的属性修改操作。第一个线程修改money=20 要进行+1运算,第二线程也在修改这个属性,按正确结果应该是22,但是出现并发从数据库读的数据就不是21了,Jfinal如何通过程序控制解决这个问题?我知道hibernate使用乐观锁能解决这个问题,每次读数据时version会+1或者使用时间戳

加载中
0
simona
simona
我也想知道
0
longrmlife
longrmlife
貌似只能自己写一个了。。。
0
cwledit
cwledit

这个和jfinal没啥关系, 这个是JDBC的知识:

jfinal中 public  static boolean tx(int transactionLevel, IAtom atom)这个事务方法可以设置事务的级别, 当然也可以在 config类中做全局配置

ActiveRecordPlugin arp = new ActiveRecordPlugin(ds).setShowSql(true);
  arp.setTransactionLevel(transactionLevel);

然后说明下这个 transactionLevel:

static int TRANSACTION_NONE = 0;      //JDBC驱动不支持事务

static int TRANSACTION_READ_UNCOMMITTED = 1;  //允许脏读、不可重复读和幻读。

static int TRANSACTION_READ_COMMITTED = 2;  //禁止脏读,但允许不可重复读和幻读。

static int TRANSACTION_REPEATABLE_READ = 4; //禁止脏读和不可重复读,单运行幻读。

static int TRANSACTION_SERIALIZABLE = 8; //禁止脏读、不可重复读和幻读。



cwledit
cwledit
回复 @bingsdd : 我是说解决方案啊, 下面只是解释下, 在全局设置 事物级别, arp.setTransactionLevel(2);
cwledit
cwledit
回复 @longrmlife : 数据库加锁的话效率更加低了.
b
bing_chuan
打错字了,程度改成程序
b
bing_chuan
问题是要解决方案不是理论知识,你要防止虚读不用程度控制不行的,按你说的设置事务等为最高级是可以解决问题,但是性能是相当差的,特别是在大并发网站,这个行不通的。
longrmlife
longrmlife
这跟事务有什么关系?是需要在数据库上加锁,防止读脏数据
返回顶部
顶部