`
schy_hqh
  • 浏览: 555884 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Hibernate基于配置文件(十四)组合映射Component

 
阅读更多
组合关系
--体现整体与部分同存同亡
--数据存储到一张表中,提交检索速度
--数据都在一张表中,不存在延迟加载的问题,使用load或get都一样

--一个类持有多个component,字段需取别名以示区分

 

package org.leadfar.hibernate.model;

public class Person {

	private int id;
	private String name;
	private Address work;
	private Address home;
	
	
	Person() {
	}



	public Address getWork() {
		return work;
	}



	public void setWork(Address work) {
		this.work = work;
	}



	public Address getHome() {
		return home;
	}



	public void setHome(Address home) {
		this.home = home;
	}



	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;
	}

}

 

package org.leadfar.hibernate.model;

public class Address {
	private String province;
	private String city;
	private String street;
	
	Address(){}
	
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getStreet() {
		return street;
	}
	public void setStreet(String street) {
		this.street = street;
	}
	
	
	
}

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="org.hibernate.auction">
	<!-- name为实体类 table为映射到数据库中的表  lazy默认为true 延迟发出select语句,直到真正用到对象的属性(非id属性)-->
	<class name="org.leadfar.hibernate.model.Person" table="t_person" >
		<!-- id为数据库标识,作为主键 -->
		<id name="id">
			<generator class="native"/>
		</id>
		
		<property name="name"/>
		
		<component name="work" class="org.leadfar.hibernate.model.Address">
			<property name="province" column="work_p"/>
			<property name="city" column="work_c"/>
			<property name="street" column="work_s"/>
		</component>
		
		<component name="home" class="org.leadfar.hibernate.model.Address">
			<property name="province" column="home_p"/>
			<property name="city" column="home_c"/>
			<property name="street" column="home_s"/>
		</component>
		
	</class>
	
</hibernate-mapping>

 

测试

package org.leadfar.hibernate.model;




import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test_Component_01 extends TestCase {

	
	public void testSave_01() throws Exception {
		//默认读取类路径根目录下的hibernate.cfg.xml配置文件
		Configuration cfg = new Configuration().configure();
		
		//创建SessionFactory
		//buildSessionFactory的时候会自动创建数据库表
		SessionFactory sfactory = cfg.buildSessionFactory();
		
		//创建Hibernate Session
		Session session = sfactory.openSession();
		
		try {
			//开启事务
			session.beginTransaction();
			
			Person p = new Person();
			p.setName("张三");
			
			Address home = new Address();
			home.setProvince("四川");
			home.setCity("眉山");
			home.setStreet("洪雅");
			
			Address work = new Address();
			work.setProvince("北京");
			work.setCity("北京");
			work.setStreet("马家堡");
			
			p.setHome(home);
			p.setWork(work);
			
			session.save(p);
			
			//提交事务
			session.getTransaction().commit();
			
		} catch(Exception e) {
			e.printStackTrace();
			//出现异常,回滚事务
			session.getTransaction().rollback();
		} finally {
			//关闭session
			session.close();//session关闭之后,user对象处于离线Detached状态
		}
	}
	public void testLoad_01() throws Exception {
		//默认读取类路径根目录下的hibernate.cfg.xml配置文件
		Configuration cfg = new Configuration().configure();
		
		//创建SessionFactory
		//buildSessionFactory的时候会自动创建数据库表
		SessionFactory sfactory = cfg.buildSessionFactory();
		
		//创建Hibernate Session
		Session session = sfactory.openSession();
		
		try {
			//开启事务
			session.beginTransaction();
			
			Person p = (Person)session.load(Person.class, 2);
			System.out.println(p.getId()+","+p.getName()+","+p.getWork().getProvince()+","+p.getHome().getProvince());
			
			//提交事务
			session.getTransaction().commit();
			
		} catch(Exception e) {
			e.printStackTrace();
			//出现异常,回滚事务
			session.getTransaction().rollback();
		} finally {
			//关闭session
			session.close();//session关闭之后,user对象处于离线Detached状态
		}
	}
	
	
	
}

 

分享到:
评论

相关推荐

    《Hibernate 各类映射文件与配置文件模板》HibernateMappingConfig.zip

    《Hibernate各类映射文件与配置文件模板》是一个包含多种Hibernate映射和配置示例的压缩包,用于帮助开发者理解和使用Hibernate框架。Hibernate是Java领域的一个流行的对象关系映射(ORM)框架,它允许开发者用面向...

    Hibernate配置文件中映射元素详解

    【Hibernate配置文件中映射元素详解】 在对象关系映射(ORM)框架Hibernate中,对象与数据库表之间的关联是通过一个XML配置文件来定义的。这个XML文件包含了映射元素,用于描述Java类如何转化为数据库中的表。映射...

    spring整合struts2与hibernate核心配置文件

    3. **Hibernate配置**:配置数据库连接信息,定义实体类映射,开启自动扫描实体类。 4. **Action类**:通常标记为`@Component`,并使用`@Autowired`注解注入所需的Service或DAO。 通过这些配置,SSH能够协同工作,...

    对Hibernate配置文件中的映射元素详解

    在本文中,我们将深入探讨Hibernate配置文件中的映射元素,这些元素是将对象关系映射到数据库的关键部分。首先,我们需要了解映射文件的基本结构,它通常是一个XML文档,遵循特定的DTD(文档类型定义)。 `...

    component(组件映射)

    3. **Component的声明**:说明如何在Hibernate的配置文件或注解中声明一个Component,包括它的类定义、属性和关联关系。 4. **Component的嵌入方式**:介绍如何在其他实体类中嵌入Component,包括使用`@Component`...

    Hibernate教程09_关系映射之组件映射

    源码可能包含了`Employee`、`Address`以及其他相关类,以及对应的配置文件,如`hibernate.cfg.xml`,用以配置Hibernate的会话工厂和实体映射。 在配置文件中,组件映射不会像实体那样定义一个单独的表,而是将组件...

    hibernate组件映射

    在Hibernate中,组件映射通常通过XML配置文件或者使用注解来实现。以下是一个使用XML配置的示例: ```xml &lt;hibernate-mapping&gt; &lt;component name="childComponent"&gt; &lt;/component&gt; &lt;/hibernate-...

    Hibernate 映射文件 结构

    10. **&lt;component&gt;**:组合属性映射,将多个属性组合成一个复合类型。 11. ****、****、****、****:集合类型的映射,对应Java中的List、Set和Map,用于处理一对多关系。 12. ****:缓存配置,可以设置二级缓存,...

    SpringMVC+Spring+hibernate配置

    3. 创建SpringMVC配置文件:定义处理器映射器、视图解析器、拦截器等。 4. 编写Controller:实现请求处理逻辑,使用@RequestMapping注解定义URL映射。 接下来,Spring框架是整个应用程序的基石,它通过DI管理对象的...

    springmvc + hibernate annotation 配置

    3. **配置Hibernate**:在主配置文件(如`applicationContext.xml`)中,配置Hibernate的数据源、SessionFactory和事务管理器。使用`LocalSessionFactoryBean`来创建SessionFactory,并设置数据库连接信息。同时,...

    hibernate-dtd-xsd约束文件

    在Hibernate中,DTD(Document Type Definition)和XSD(XML Schema Definition)文件是用于定义XML配置文件的结构和约束的关键元素。下面我们将深入探讨这些文件及其在Hibernate中的作用。 首先,DTD文件是XML文档...

    Hibernate组件映射代码详解

    "Hibernate组件映射代码详解" titre的知识点: * Hibernate组件映射代码的概念和实现 * 组件关联映射的属性和...Hibernate组件映射的配置文件是指People.hbm.xml文件,该文件用于描述实体类和组件类之间的映射关系。

    Hibernate3.1_学习源码

    03 03Hibernate_Component : 实体细粒度的划分,数据库中的一张表在程序中划分为几个部分的实体,配置文件和增、删、改、查的使用。 04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计...

    基于Annocation的spring-hibernate配置

    2. **配置Spring**:创建一个Spring配置文件,例如`applicationContext.xml`,启用Annotation配置,使用`&lt;context:component-scan&gt;`元素扫描带有特定注解的类,同时配置数据源和Hibernate SessionFactory。...

    spring-hibernate注解配置源码

    在注解配置下,我们不再需要`hibernate.cfg.xml`配置文件,而是使用`@Entity`注解标识实体类,`@Table`定义对应的数据库表,`@Id`标识主键,`@GeneratedValue`处理自增主键等。此外,`@ManyToOne`、`@OneToOne`、`@...

    hibernate复杂关系的映射

    我们将深入探讨这些实体类及其在映射文件中的配置。 首先,`Employer`类代表雇主,通过`&lt;class&gt;`元素映射到`employers`表。`id`属性定义了主键,使用`sequence`生成器生成序列,这在PostgreSQL等支持序列的数据库中...

    springmvc+hibernate+定时器配置实例

    首先,你需要在SpringMVC的配置文件中添加定时任务的配置,比如使用Spring的TaskExecutor或Scheduler,或者集成Quartz库。然后,定义一个定时任务类,这个类中包含执行定时任务的方法,并且这个方法内部可以使用...

    Hibernate组件映射(annotation/xml)

    在传统的Hibernate配置中,组件映射通常通过XML配置文件实现。例如: ```xml &lt;hibernate-mapping&gt; &lt;id name="id" column="ID"&gt;&lt;/id&gt; &lt;component name="child"&gt; &lt;/component&gt; &lt;!-- 如果组件类需要独立...

    JEECG HIBERNATE

    它的核心概念包括实体(Entity)、持久化类(Persistent Class)、配置文件(Hibernate Configuration File)、映射文件(Mapping File)以及会话工厂(SessionFactory)和会话(Session)等。 **2. Hibernate的...

Global site tag (gtag.js) - Google Analytics