`
fisherhe
  • 浏览: 53041 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate学习笔记(对象-一对多关系映射)

阅读更多

hibernate中对象-关联关系分为三种:

1.one-to-one

2.one-to-many/many-to-one

3.many-to-many

其中one-to-many是最主要的一种关联关系,另外两种关联关系可以通过one-to-many或者many-to-one进行扩展.

先来看one-to-one:

User持久化类:

public class User {
	private Integer u_id;
	private String userName;
//用户对应多个订单,这其中就是一对多得关联关系
          private Set<Order> order = new HashSet<Order>();
	 public Integer getU_id() {
		return u_id;
	}

	public void setU_id(Integer u_id) {
		this.u_id = u_id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

 

 Order持久化类:

public class Order {
	private int orderNum;
	private Integer o_id;
	private User user;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public Integer getO_id() {
		return o_id;
	}

	public void setO_id(Integer o_id) {
		this.o_id = o_id;
	}
}

 

  在来看看配置文件:

<hibernate-mapping package="com.lovo">
	<class name="User" table="t_user">
		<id name="u_id" column="f_user_id" type="integer">
			<generator class="identity"></generator>
		</id>
<!--这里省略了User,Order类基本属性的映射-->
<!--order是User类中Set集合属性对应字段名-->
                                <set name="order" cascade="delete" inverse="true">
<!-- 通过订单表定的字段fk_user_id来关联,外键,是字段名,设置级联为delete,保证用户删除同时删除用户订单 -->
<!--inverse="true"将一对多关系中"一"方的维护交给"多方",是一对多关联关系中重要的设置-->
		<key column="fk_user_id">

			</key>
			<!-- 设置一对多的关系 -->
			<one-to-many class="Order" />
		</set>

 

 Order类的映射配置:

<class name="Order" table="t_order">
		<id name="o_id" type="integer" column="f_o_id">
			<generator class="identity"></generator>
		</id>
	<!--建立与User的多对一关联关系,通过一个外键去关联User类 -->
<many-to-one name="user" class="User" column="fk_user_id">
		</many-to-one>

 

 用main方法来先建表:

public class CreateTable {
	public static void main(String[] args) {
		Configuration cfg=new Configuration().configure();
		SchemaExport se=new SchemaExport(cfg);
		se.create(false, true);
	}

}

写的一个得到session的单例类

public class HibernateUtil {
	private static SessionFactory sf;
	private static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
	static {
		try{
			//// Create the SessionFactory from hibernate.cfg.xml
			Configuration cfg = new Configuration().configure();
		sf = cfg.buildSessionFactory();
		}
		catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }

	}

	public static Session getSession() throws HibernateException {
		Session session = (Session) threadlocal.get();
		if (session == null) {
			session = sf.openSession();
			threadlocal.set(session);
		}
		return session;
	}

	public static void closeSession() throws HibernateException {
		Session session = (Session) threadlocal.get();
		threadlocal.set(null);
		if (session != null) {
			session.close();
		}
	}

}

 用JUnit做一个保存方法的单元测试

 

public class TestUser extends TestCase {

	public void testSave() {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		User user=new User();
                                user.setUserName("fisher");
		Order order =new Order();
                                 Order order1=new Order();
		order.setOrderNum("100011");
                                 order1.setOrderNum("100012");
//建立双向关联关系,user类中一对多关系,Order类中多对一关系
		user.getOrder().add(order);
                                order1.setUser(user); 
                                 order.setUser(user);
                                 tx.commit();
                                 HibernateUtil.closeSession();
   }
}

 

 

 

 

1
0
分享到:
评论

相关推荐

    JPA学习笔记-EJB-04JPA关联映射总结

    2. `@OneToMany`:一对多关系,一个实体可以有多个相关联的实体。 3. `@ManyToOne`:多对一关系,多个实体对应另一个实体的单一实例。 4. `@ManyToMany`:多对多关系,多个实体可以关联多个其他实体,通常需要一个...

    Java相关课程系列笔记之十四Hibernate学习笔记

    - 对象关系映射:将Java对象与数据库表建立一对一、一对多、多对一、多对多的映射关系。 - 缓存机制:提供第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),提高性能。 - 支持懒加载和立即加载:...

    Hibernate学习笔记(1-13)

    - Hibernate支持一对多、一对一、多对一、多对多等各种关联关系的映射,通过hbm.xml文件配置。 5. **继承映射**: - 支持类继承关系的映射,可以将子类对象的数据存储在同一个表或者不同的表中。 6. **集合映射*...

    hibernate API帮助文档 及hibernate学习笔记

    - 可能会包含对复杂关联关系的处理,如多对一、一对多、多对多关系的映射。 - 可能涉及到Hibernate与其他技术的整合,如Spring、MyBatis等。 7. **进阶话题** - **Hibernate逆向工程**: 自动根据数据库表生成...

    hibernate学习笔记文档

    - **一对多与多对多映射**: - 在实体类设计时,通过关联属性定义一对多或多对多的关系。 - 在 XML 映射文件中使用 `&lt;one-to-many&gt;` 或 `&lt;many-to-many&gt;` 标签来配置这些关系。 - **查询操作**: - 使用 HQL...

    Hibernate学习笔记和资料

    hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    hibernate-note学习笔记

    - **一对多映射**: 通常在父类中定义一个集合属性来表示子类的集合。 - **多对多映射**: 通常需要一个额外的关联表来维护双方之间的关系。 **2.3 继承关系映射** - **一个类一个表**(`single-table`): 所有的子类都...

    达内HIBERNATE学习笔记

    根据提供的信息,我们可以总结出以下关于达内HIBERNATE学习笔记的重要知识点: ### 第一章:Hibernate入门 #### 1.1 学习目标 - 理解Hibernate的基本概念。 - 掌握如何使用Hibernate进行开发。 #### 1.2 对象持久...

    hibernate学习笔记

    在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....

    马士兵hibernate学习笔记

    - **一对多映射**:通过 `@OneToMany` 或 `@ManyToOne` 实现。 - **多对一映射**:通常使用 `@ManyToOne` 实现。 - **多对多映射**:通过 `@ManyToMany` 实现。 #### 九、Hibernate 查询(HQL) - **HQL**:...

    hibernate学习笔记mashibing

    例如,一对一、一对多、多对一、多对多的关系都可以通过配置文件或注解进行映射。通过这种方式,我们可以在Java对象之间直接操作相关联的数据,而无需关心底层的SQL。 在Struts等MVC框架中整合Hibernate,可以构建...

    马士兵java框架hibernate学习笔记

    - **一对多映射**:使用`@OneToMany`注解实现。 - **多对一映射**:使用`@ManyToOne`注解实现。 - **多对多映射**:使用`@ManyToMany`注解实现。 #### 九、Hibernate查询(HQL) - **知识点概述**: - **HQL...

    hibernate学习笔记,学习大纲【吐血推荐】

    - **关联映射**:一对一、一对多、多对一、多对多关系的映射处理。 - **懒加载与立即加载**:理解不同加载策略的影响。 通过以上内容的学习,你将能够熟练掌握Hibernate的使用,实现高效、便捷的数据库操作。在实际...

    hibernate 学习笔记3

    描述:本篇笔记深入探讨了Hibernate框架中一对多关系的映射及持久化对象状态管理,结合个人理解与实践经验,旨在为读者提供一份详实的学习资料。 ### 一、一对多关系映射详解 在Hibernate框架中,一对多关系是一种...

    hibernate学习笔记.

    【hibernate学习笔记】 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它极大地简化...在实践中,还需要熟悉Criteria查询、HQL语言、事务管理、缓存策略以及多对一、一对多、多对多等关系映射的配置。

Global site tag (gtag.js) - Google Analytics