zoukankan      html  css  js  c++  java
  • Hibernate-使用事务

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		User u1 = new User();
    		u1.setName("测试11111");
    		
    		User u2 = new User();
    		u2.setName("测试222222");
    		
    		new SaveService().add(u1, u2);
    		
    		System.out.println("ok");
    	}
    

    配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    	<session-factory>
    		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernatetransaction</property>
    		<property name="hibernate.connection.username">root</property>
    		<property name="hibernate.connection.password">root</property>
    		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    		
    		<property name="hibernate.show_sql">true</property>
    		<property name="hibernate.format_sql">true</property>
    		
    		<property name="hibernate.hbm2ddl.auto">update</property>
    		
    		<!-- 将session绑定到当前的线程中,这样在同一个线程中就可以使用同一个session,进行事务操作,要是用全称 -->
    		<property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>
    		
    		<mapping resource="com/gordon/domain/User.hbm.xml"/>
    	</session-factory>
    </hibernate-configuration>
    
    package com.gordon.service;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    
    import com.gordon.dao.SaveDao;
    import com.gordon.domain.User;
    import com.gordon.utils.HibernateUtil;
    
    public class SaveService {
    
    	public void add(User u1, User u2) {
    		
    		SaveDao saveDao = new SaveDao();
    		
    		
    		// 从当前线程中获取session
    		Session session = HibernateUtil.getCurrentSession();
    		//开启这个session的事务
    		Transaction tr = session.beginTransaction();
    		
    		try {
    			saveDao.add1(u1);
    			
    			int i =  100/0;
    			
    			saveDao.add2(u2);
    			
    			tr.commit();
    		} catch (Exception e) {
    			tr.rollback();
    			e.printStackTrace();
    		}
    		
    		// 不需要关闭session,会自动关闭
    		
    	}
    
    }
    
    package com.gordon.dao;
    
    import org.hibernate.Session;
    
    import com.gordon.domain.User;
    import com.gordon.utils.HibernateUtil;
    
    public class SaveDao {
    
    	public void add1(User u) {
    		Session session = HibernateUtil.getCurrentSession();
    		session.save(u);
    	}
    
    	public void add2(User u) {
    		Session session = HibernateUtil.getCurrentSession();
    		session.save(u);
    	}
    
    }
    
    package com.gordon.utils;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtil {
    	private static final Configuration CONFIGURATION;
    	private static final SessionFactory SESSIONFACTORY;
    
    	static {
    		CONFIGURATION = new Configuration().configure();
    		SESSIONFACTORY = CONFIGURATION.buildSessionFactory();
    	};
    
    	public static Session getSession() {
    		return SESSIONFACTORY.openSession();
    	}
    	
    	public static Session getCurrentSession() {
    		return SESSIONFACTORY.getCurrentSession();
    	}
    }
    
  • 相关阅读:
    解决异常:“The last packet sent successfully to the server was 0 milliseconds ago. ”的办法
    关于时间复杂度
    关于如何在MyEclipse下修改项目名包名,以及类
    Error filterStart
    类A是公共的,应在名为A.java的文件中声明错误
    Eclipse快捷键大全
    JVM 是用什么语言写的?
    退出cmd命令
    Java 如何对文件进行多个Object对象流的读写操作
    SublimeText2 快捷键一览表
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/7411396.html
Copyright © 2011-2022 走看看