jdbc:mysql://localhost:3306/lockdb useUnicode=true&characterEncoding=utf8&autoReconnect=true&autoReconnectForPools=true
com.mysql.jdbc.Driver
org.hibernate.dialect.MySQLDialect
最后要实现的就是测试主程序了,在测试主程序中包含了Hibernate的初始化代码以及悲观锁的测试方法。测试主程序的实现方法如清单14.4所示。
清单14.4 测试主程序的实现
package cn.hxex.hibernate.lock;
import java.net.URL;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class LockMain {
private static Log log = LogFactory.getLog( LockMain.class );
// 静态Configuration和SessionFactory对象的实例(全局唯一的)
private static Configuration configuration;
private static SessionFactory sessionFactory;
static
{
// 从默认的配置文件创建SessionFactory
try
{
URL configURL = ClassLoader.getSystemResource(
"cn/hxex/hibernate/lock/hibernate.cfg.xml" );
// 创建默认的Configuration对象的实例
configuration = new Configuration();
// 读取hibernate.properties或者hibernate.cfg.xml文件
configuration.configure( configURL );
// 使用静态变量来保持SessioFactory对象的实例
sessionFactory = configuration.buildSessionFactory();
}
catch (Throwable ex)
{
// 输出异常信息
log.error("Building SessionFactory failed.", ex);
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public void testPessimisticLock() {
SessionFactory sf = LockMain.getSessionFactory();
Session session = sf.getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("from User user");
query.setLockMode("user", LockMode.UPGRADE);
List users = query.list();
for( int i=0; i System.out.println( users.get( i ) ); } session.getTransaction().commit(); } public static void main(String[] args) { LockMain main = new LockMain(); main.testPessimisticLock(); } } 在上面的清单中,testPessimisticLock()方法就是测试悲观锁的方法,该方法在执行查询