`

一对多映射配置文件hbm.xml以及级联

阅读更多
有两个类, 一个是User, 一个是Order
一个User可以包含多个Order对象。

package com.lj.zhang;

import java.util.Set;

public class User
{
	private int id;
	
	private String name;
	
	
	//一对多, 通过该变量可以引用到对应的Order集合对象
	private Set<Order>orders;
	 
	

	public Set<Order> getOrders()
	{
		return orders;
	}

	public void setOrders(Set<Order> orders)
	{
		this.orders = orders;
	}

	

	public User(int id, String name)
	{
		super();
		this.id = id;
		this.name = name;
	}
	
	public User()
	{
		// TODO Auto-generated constructor stub
	}
	
	
}	

package com.lj.zhang;

public class Order
{	
	
	@Id
	private int id;
	
	private String name;
	
	
	//多对一, 多个order通过引用可以对应到关联的User对象。
	private User user;
	
	

	public User getUser()
	{
		return user;
	}

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


	
	


==============级联==========
假如有一个User对象user1, 对应有三个Order对象order1,order2,order3
当保存user1时, 按照道理, 这三个Order对象也会被保存起来。
在上面的例子中, 通过
<set name="orders" cascade="save-update" inverse="true">
来设置这个关联。  inverse=true表示由order来维持这个关系。

cascade表示当User进行何种操作的时候, 会关系到对应的set对象。
这里设置的是"save-update",也就是当添加user的时候, 与user对象对应的,
也就是user对象所包含的order对象也会被加入到数据库中, 并与该user对象关联。

但是如果设置成none, 那不管user.setOrder()这里设置进去多少order, 最后都
不会被存入数据库。 被存入数据库的最终就只有user自己。
==============级联==========



<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
          
  <hibernate-mapping package="com.lj.zhang">
  	<class name="Order" table="test_order">
  			<id name="id">
  				<generator class="assigned"/>
  			</id>
  			 <property name="name" column="test_name"/>
  			
  		
  		<!-- 告诉hibernate, 多对一映射的对象是什么类型的 -->	
  		<!-- 这里的column对应的是User.hbm.xml里的set里面的key column 
  			告诉hibernate这个对象所对应的user的foreign key
  		-->
		<many-to-one name="user" class="com.lj.zhang.User" column="customer_id"></many-to-one>
  			
  	</class>
  
  
  </hibernate-mapping>
          
          
      
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
          
  <hibernate-mapping package="com.lj.zhang">
  	<class name="User" table="test_user">
  			<id name="id">
  				<generator class="native"/>
  			</id>
  			
  			<!-- length是用于定义数据库里面的字段的长度 -->
  			<property name="name" type="string" length="40" column="test_name"/>
  			 
  			  
  			
  			
  			<!-- 配置一对多关系要用到set节点 
  				name属性是User类中的属性名称
  				one-to-many里的class属性告诉了hibernate对应的类, 这样
  				才可以通过反射生成对象
  			-->
  			<set name="orders" cascade="save-update" inverse="true">    <!-- 级联, inverse=true表示由多的一方维持关联关系 -->
  				<!-- key的column告诉hibernate多的一方的foreign key -->
  				<!--  这里设置为customer_id, 就会在数据库的order表里生成相应的 -->
  				<key column="customer_id"></key>
  				<one-to-many class="com.lj.zhang.Order"/>
  			</set>
  			
  	</class>
  
  
  </hibernate-mapping>
          
          
      






源码笔记:
这里的final Type[] types里便是我们的Java对象类型。
org.hibernate.event.internal;

public class DefaultFlushEntityEventListener implements FlushEntityEventListener {
public void onFlushEntity(FlushEntityEvent event) throws HibernateException {
		final Object entity = event.getEntity();
		final EntityEntry entry = event.getEntityEntry();
		final EventSource session = event.getSession();
		final EntityPersister persister = entry.getPersister();
		final Status status = entry.getStatus();
		final Type[] types = persister.getPropertyTypes();

		final boolean mightBeDirty = entry.requiresDirtyCheck(entity);

		final Object[] values = getValues( entity, entry, mightBeDirty, session );





分享到:
评论

相关推荐

    Hibernate关联关系hbm.xml中的相关属性

    在Hibernate中,关联关系是对象关系映射(ORM)的核心组成部分,它允许我们将数据库的表结构映射到Java对象,并管理这些...在hbm.xml文件中正确地配置这些标签和属性,可以使Hibernate更高效、更灵活地管理对象关系。

    hibernate 多对一映射关联配置

    在Hibernate的XML映射文件(如.hbm.xml)中,我们使用`&lt;many-to-one&gt;`标签来定义多对一关系。例如: ```xml &lt;many-to-one name="parentEntity" class="com.example.ParentEntity" column="parent_id" /&gt; ``` 这里,...

    hibernate many-to-many级联保存,级联更新,级联删除

    在Hibernate配置文件(如hibernate.cfg.xml)中,你需要为实体类定义映射文件(如Student.hbm.xml和Course.hbm.xml)。在这些映射文件中,使用`&lt;many-to-many&gt;`标签来定义关系。例如: ```xml &lt;!-- Student.hbm.xml...

    Hibernate单向一对多关联映射(XML版)

    在本主题"Hibernate单向一对多关联映射(XML版)"中,我们将深入探讨如何使用XML配置来实现数据库中一个实体类对应多个实体类的关联关系。 在Hibernate中,一对多关联是一种常见的关系映射类型,它反映了数据库中的...

    多对多建表及配置映射文件

    在Hibernate中,我们可以在Java类的映射文件(`.hbm.xml`)中定义多对多的映射。例如,在`Author.hbm.xml`中,我们创建了一个名为`books`的`set`集合,指定其逆向关系(`inverse="true"`),表名(`table="BOOK...

    Spring+Hibernate一对多关联映射---部门与员工表的级联添加

    总结来说,Spring和Hibernate结合使用的一对多关联映射,关键在于配置正确的映射文件,设定级联策略,并在业务逻辑中利用这些配置进行数据的增删改查操作。理解并掌握这一技术,能有效提升开发效率,减少手动处理...

    Hibernate 配置详解 (二)

    本文将更加深入地解析另一种重要的配置文件——`*.hbm.xml`,特别是如何通过此类文件来管理实体与数据库表之间的映射关系,以及处理复杂的关联关系,如一对一、一对多、多对一和多对多。 #### `*.hbm.xml`文件解析 ...

    hibernate的多对多配置

    本篇将深入探讨如何在Hibernate中配置多对多关系,特别是通过hibernate.hbm.xml文件进行配置。 一、理解多对多关系 在数据库设计中,多对多关系意味着两个表之间存在复杂的关系,例如,学生可以选修多门课程,而...

    映射多对多及一对一关系

    ### 映射多对多及一对一关系 #### 一、多对多关系映射 在数据库设计中,当两个实体之间存在多对多的关系时,通常会使用一个关联表来维护这种关系。例如,在给定的例子中,`Employees`表和`Roles`表之间的关系即为...

    hibernate利用配置文件反向生成数据库所有配置文件及方法

    XML映射文件中,`&lt;id&gt;`标签定义了主键,`&lt;property&gt;`标签用于映射普通字段,而`&lt;bag&gt;`标签则表示一对多的关系,如`building2`和`site2`分别对应`BuildingPO`和`SitePO`实体类。 关于数据类型的转换,例如在Oracle中...

    hibernate多对一映射(XML)版

    在Java世界中,Hibernate是一个非常...总之,Hibernate的多对一映射通过XML配置文件使得Java对象与数据库表之间的关系变得清晰明了,简化了开发过程。理解并熟练运用这一特性,能够帮助你更高效地进行数据访问和操作。

    hibernate一对多映射

    在这个实例中,我们将深入探讨如何在Hibernate中实现这种映射,包括配置XML映射文件、创建数据库表以及编写相关的Java实体类。 首先,我们需要理解一对多映射的基本概念。在关系型数据库中,"一"端通常表示主表,而...

    Hibernate一对多映射

    本文将深入探讨Hibernate一对多映射的概念、配置以及实现方式,并结合提供的源代码和测试代码进行详细解析。 一、Hibernate一对多映射基础 1. 概念理解: 在数据库中,一对多关系意味着一个实体(如用户)可以...

    关于Hibernate级联删除的问题.doc

    级联操作的设置方式有多种,对于一对一和多对一的关系,可以通过`cascade="delete"`或`cascade="all"`,而对于一对多的关系,可以选择`cascade="all-delete-orphan"`或`cascade="all"`。`delete`只在删除父对象时...

    hibernate一对一主键关联映射(双项关联)

    对于不使用注解的旧版Hibernate,我们需要在XML映射文件中配置一对一关系。 ```xml &lt;!-- User.hbm.xml --&gt; ... ... &lt;!-- Account.hbm.xml --&gt; ... ... ``` 三、双向关联的注意事项 1. **...

    Hibernate双向一对一关联映射(XML版)

    在XML配置文件中,我们通常会在`hibernate.cfg.xml`中定义数据源和SessionFactory,而在实体类对应的`.hbm.xml`文件中设置一对一映射。以下是一个简单的例子: 1. **实体类定义**: - 假设我们有两个实体类:`...

    hibernate一对多案例

    本案例主要探讨的是Hibernate中的一对多关系映射,这是一种常见的对象关系映射(ORM)配置,用于表示一个实体与多个其他实体之间的关联。 在传统的数据库设计中,一对多关系是指一个表(父表)中的记录可以与另一个...

    Hibernate many-to-many

    2. **映射文件(hbm.xml)**:描述了实体类与数据库表的映射,以及多对多关联的配置。 3. **配置文件(hibernate.cfg.xml)**:包含数据库连接信息和其他Hibernate配置。 4. **测试类(Test)**:用于执行实际的...

Global site tag (gtag.js) - Google Analytics