`
Supanccy2013
  • 浏览: 223688 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate 基本事务

阅读更多
     业务需求:增加一个人,这个人有两个地址,人是一张表,两个地址是一张表。一个人,两个地址全部保存是一个事务,否则谁也不保存。

1,Person类:
package com.supan.bean;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Person {
	private int id;
	private String name;
	private int age;
    private Set<Address> addresss = new HashSet<Address>();
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Set<Address> getAddresss() {
		return addresss;
	}
	public void setAddresss(Set<Address> addresss) {
		this.addresss = addresss;
	}
}


Person的映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="true" default-access="property" package="com.supan.bean" >
    <class name="Person" dynamic-update="true" dynamic-insert="true" table="myperson">
        <id name="id" column="id" type="integer">
            <generator class="native"/>
        </id>
        <property name="name" type="string" column="name" length="20"/>
        <property name="age" type="integer" column="age" length="3"/>
        <set name="addresss" inverse="true" cascade="all" >
             <key column="personid"/>
             <one-to-many class="Address"/>
        </set>
    </class>
</hibernate-mapping>


2,Address类
package com.supan.bean;
public class Address {
	private int id;
	private String name;
	private String info;
    private String remark;
    private Person person;
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
}


Address映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-lazy="true" default-access="property" package="com.supan.bean" >
    <class name="Address" dynamic-update="true" dynamic-insert="true" table="address">
        <id name="id" column="id" type="integer">
            <generator class="native"/>
        </id>
        <property name="name" type="string" column="NAME" length="20"/>
        <property name="info" type="string" column="INFO" length="30"/>
        <property name="remark" type="string" column="REMARK" length="30"/>
        <many-to-one name="person" class="Person" column="personid" not-null="true"></many-to-one>
    </class>
</hibernate-mapping>


3,测试类:
	/**
	 * 该测试类,结果是,人,和两个地址都保存不成功,事务回滚
	 */
	public void testInsert() {
		Configuration config = new Configuration().configure();
		SessionFactory sf = config.buildSessionFactory();
		Session sess = sf.openSession();
		Transaction tx = null;
		try {
			sess = sf.openSession();
			tx = sess.beginTransaction();// 相当于JDBC的connection.setAutoCommit(false);

			Person person = new Person();
			person.setName("陈超阳");
			person.setAge(27);
			//先保存人,这个人是一定能保存成功的。
			sess.save(person);
			System.out.println("人已经保存到数据库中");

			Address address = new Address();
			address.setName("aaaaa");
			address.setInfo("aaaaa");
			address.setRemark("aaaaa");
			//保存第一个地址,这个地址是保存不成功的,因为personid不能为null
			//该句会抛出一个异常
			sess.persist(address);

			Address address2 = new Address();
			address2.setName("bbbbbbbbbb");
			address2.setInfo("bbbbbbbbbbb");
			address2.setRemark("bbbbbbbbbb");
			sess.persist(address2);

			tx.commit();// 
		} catch (HibernateException e) {
			if (tx != null)
				tx.rollback();// 相当于JDBC的connection.rollback();
			throw e;
		} finally {
			if (sess != null)
				sess.close();
		}
	}


分享到:
评论

相关推荐

    详解Hibernate事务处理机制

    通过本文的学习,我们了解到Hibernate中事务处理的基本原理及其实现方法。正确地管理事务不仅可以提升应用的健壮性,还能有效避免数据不一致等问题。在实际项目中,根据具体的业务场景选择合适的事务管理模式是非常...

    Spring+Hibernate注解事务实例

    通过实践这个实例,你不仅能掌握Spring和Hibernate的基本用法,还能深入理解声明式事务管理的工作原理,这对于开发复杂的、需要事务支持的Java应用程序来说是非常重要的。这将提高你的代码质量和可维护性,让你的...

    Spring Hibernate 事务处理 详细说明

    - Session API:Hibernate的Session对象是操作数据库的基本单元,它支持begin、commit和rollback等事务操作。 - Transaction API:Hibernate的Transaction接口提供了更高级别的事务管理,可以用来控制事务的生命...

    Hibernate事务(源码)

    事务是数据库操作的基本单位,它保证了一组操作的原子性、一致性、隔离性和持久性,即ACID特性。在Hibernate中,事务通常与Session对象紧密关联,Session是Hibernate与数据库交互的主要接口。 ### 2. Hibernate事务...

    hibernate基本jar包

    这个"hibernate基本jar包"包含了运行Hibernate项目所需的库文件。 在Java开发环境中,JAR(Java Archive)文件是一种归档格式,用于收集多个类文件和其他资源,以便在Java虚拟机中作为一个单一的模块来分发。...

    在Spring中配置Hibernate事务

    首先,我们需要理解Spring事务管理的两种基本模式:编程式事务管理和声明式事务管理。编程式事务管理需要在代码中显式调用开始、提交、回滚等事务操作,而声明式事务管理则通过在XML或注解中声明事务边界,让Spring...

    spring 结合druid和hibernate使用jta配置分布式事务

    以上就是Spring结合Druid和Hibernate,使用Atomikos实现JTA配置分布式事务的基本流程。在实际应用中,还需要考虑异常处理、事务隔离级别、事务的传播行为等因素,以满足不同业务场景的需求。同时,需要注意的是,...

    hibernate基本配置要用到的包

    以下是一些关于Hibernate基本配置和所需JAR包的详细解释: 1. **Hibernate Core**: 这是Hibernate的核心库,包含了所有必要的API和实现,如SessionFactory、Session、Transaction等。在`hibernate-core-x.x.x.Final...

    hibernate基本jar包(数据库是Oracle)

    在“hibernate基本jar包(数据库是Oracle)”中,我们可以推断出这是针对使用Oracle数据库的Hibernate项目所需的基础库集合。这个压缩包很可能是包含了一系列用于搭建Hibernate环境并连接Oracle数据库的JAR文件。以下...

    Hibernate事务和并发控制

    首先,事务是数据库操作的基本单位,它保证了数据的一致性和完整性。事务有四个关键属性,即ACID(原子性、一致性、隔离性和持久性)。原子性确保事务中的所有操作要么全部完成,要么全部不完成;一致性保证事务完成...

    spring,hibernate整合实现事务管理(MethodInterceptor)

    标题中的“spring,hibernate整合实现事务...通过以上知识点,我们可以理解Spring和Hibernate整合实现事务管理的基本原理和实践方法。在实际开发中,还需要根据具体需求调整和优化配置,确保事务管理的正确性和性能。

    hibernate基础jar包

    总之,这个压缩包提供了进行Hibernate开发的基本环境,包括了核心库、ORM支持和测试工具,开发者可以基于这些资源快速搭建并测试一个Hibernate项目。在实际开发中,还需要了解和掌握更多关于Hibernate的高级特性和...

    HibernateDemo(hibernate基本用法演示)

    `HibernateDemo(hibernate基本用法演示)` 是一个针对 Hibernate 框架的基础操作示例项目。Hibernate 是一款强大的 Java ORM(对象关系映射)框架,它允许开发者在 Java 应用程序中以面向对象的方式处理数据库交互,...

    16Hibernate基本API

    ### Hibernate基本API Hibernate是一种流行的Java持久化框架,它为Java应用程序提供了强大的数据持久化能力,特别是对于那些需要频繁与数据库交互的大型企业级应用。Hibernate通过其基本API,使得开发者能够以面向...

    Hibernate教程26_事务并发处理

    首先,事务是数据库操作的基本单元,它确保一组操作要么全部成功,要么全部失败,从而维护数据的完整性。在多用户同时访问数据库时,事务并发控制就显得尤为重要,以防数据冲突和不一致。 悲观锁是假设最坏的情况,...

    hibernate4基本配置方式详解

    总之,Hibernate 4 的基本配置包括了XML配置文件、编程式配置、数据库连接方式(JDBC或DataSource)、连接池配置以及事务管理。理解并熟练掌握这些配置方法对于高效使用 Hibernate 进行数据库操作至关重要。

    hibernate框架基本包

    **hibernate框架基本包** Hibernate 是一个开源的Java库,它为开发人员提供了一种在Java应用程序中持久化对象的框架。这个“hibernate框架基本包”包含了一系列必要的库文件,使得开发者能够轻松地将数据库操作与...

    hibernate5--2.数据持久化及事务

    通过以上内容,我们了解了Hibernate 5在数据持久化和事务管理方面的基本操作和注意事项。在实际项目中,结合事务的隔离级别、锁机制以及适当的事务策略,我们可以构建出高效、稳定的数据访问层。

Global site tag (gtag.js) - Google Analytics