pessimisticlockdaobean.java

来自「精通EJB3源码」· Java 代码 · 共 41 行

JAVA
41
字号
package com.foshanshop.ejb3.impl;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.foshanshop.ejb3.PessimisticLockDAO;
import com.foshanshop.ejb3.bean.User;
/**
 * 使用悲观锁避免更新丢失
 */
@Stateless
@Remote(PessimisticLockDAO.class)
public class PessimisticLockDAOBean implements PessimisticLockDAO {
	@PersistenceContext protected EntityManager em;
	
	public void init(User user) {
		em.persist(user);
	}
	
	public void payElectricityFee(int id) {//交电费
		try {
			Query query = em.createNativeQuery("select * from users where id=? FOR UPDATE", User.class);			
			User user = (User)query.setParameter(1, id).getSingleResult();
			Thread.sleep(5000);//等待存工资事务开启
			user.setBalance(user.getBalance()-200);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public void saveLaborage(int id) {//存工资
		Query query = em.createNativeQuery("select * from users where id=? FOR UPDATE", User.class);
		User user = (User)query.setParameter(1, id).getSingleResult();
		user.setBalance(user.getBalance()+13000);
	}
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?