`

集合方式的组件映射

 
阅读更多

场景:一个Student,有联系方式(联系方式名称和联系方式内容),一个student可以拥有多个联系方式,存储时分为两张表 ,一张学生表student,一张联系人表contact,但是只有一个配置文件,也就是一个配置文件生成两张表,这属于一种一对多关系,完全可以使用一对多映射使用两个配置文件配置,但是这里介绍一下使用集合方式组件映射的实现,还是推荐使用前者,因为前者比较直观,容易理解

Contact.java

package com.fgh.hibernate;

/**
 *	联系人类
 * @author fgh
 *
 */
public class Contact {

	//联系方式
	private String method;
	//联系方式内容
	private String name;

	public String getMethod() {
		return method;
	}

	public void setMethod(String method) {
		this.method = method;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

Student.java

package com.fgh.hibernate;

import java.util.HashSet;
import java.util.Set;

/**
 * 学生类
 * @author fgh
 *
 */
public class Student {

	//因为只使用一个.hbm.xml配置文件 所以这里定义student_component表的外键
	private String student_id;

	private String id;

	private String name;
	
	//定义联系人集合 用于存储多个联系方式
	private Set contacts = new HashSet<Contact>();

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getStudent_id() {
		return student_id;
	}

	public void setStudent_id(String student_id) {
		this.student_id = student_id;
	}

	public Set getContacts() {
		return contacts;
	}

	public void setContacts(Set contacts) {
		this.contacts = contacts;
	}

}

Student.hbm.xml

<?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>
	<class name="com.fgh.hibernate.Student"
		table="student">
		<id name="id" column="id" type="string">
			<generator class="uuid"></generator>
		</id>
		<property name="name" column="name" type="string"></property>
		<!-- 配置组件映射 只使用一个配置文件 生成两个表-->
		<set name="contacts" table="contact">
			<key column="student_id"></key>
			<composite-element class="com.fgh.hibernate.Contact">
				<property name="method" column="method" type="string"></property>
				<property name="name" column="name" type="string"></property>
			</composite-element>
		</set>
	</class>
</hibernate-mapping>

建表类:

CreateTable.java

package com.fgh.hibernate;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class CreateTable {

	public static void main(String[] args) {
		SchemaExport export = new SchemaExport(new Configuration().configure());
		export.create(true, true);
	}
}

测试类:HibernateTest.java

package com.fgh.hibernate;

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

/**
 * 集合方式的组件映射 跟单表映射有些相似 只是把令一張表中的字段拿到一张表里了 采用組件的方式
 * 
 * @author fgh
 * 
 */
public class HibernateTest {

	private static SessionFactory sessionFactory;

	static {
		try {
			sessionFactory = new Configuration().configure()
					.buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		Session session = sessionFactory.openSession();
		Transaction tx = null;

		try {
			tx = session.beginTransaction();

			Student student = new Student();
			student.setName("zhangsan");

			Contact contact = new Contact();
			contact.setMethod("telephone");
			contact.setName("1231241234");

			Contact contact2 = new Contact();
			contact2.setMethod("address");
			contact2.setName("beijing");

			student.getContacts().add(contact);
			student.getContacts().add(contact2);

			session.save(student);
			tx.commit();

		} catch (Exception e) {
			e.printStackTrace();
			if (null != tx) {
				tx.rollback();
			}
		} finally {
			session.close();
		}
	}
}
over



分享到:
评论

相关推荐

    集合与泛型委托映射WINFORM基础.rar

    例如,LINQ to SQL或Entity Framework等ORM(对象关系映射)工具就实现了这种映射,使得开发者可以用面向对象的方式处理数据库操作。 5. **WinForm基础**: Windows Forms是.NET Framework提供的一种用于构建桌面...

    采用ReactNative和Exponent构建的可展开列表集合组件

    在本文中,我们将深入探讨如何使用React Native和Exponent来构建一个可展开的列表集合组件。React Native是一种流行的JavaScript框架,用于开发原生移动应用程序,而Exponent则是一个平台,可以简化React Native应用...

    C++类的动态组件化技术

    2. **集合型C++类的组件化**:集合型C++类管理一组其他C++对象,如数组、列表或映射表。为了组件化,需要处理集合对象及其管理的元素对象。当集合对象和元素对象都被包装成组件后,集合型ATL对象需要有释放所有元素...

    swift-CollectionKit一个现代的Swift框架用于构建可复用的数据驱动的集合组件

    CollectionKit 是一个针对Swift编程语言设计的现代框架,其核心目标是帮助开发者高效地构建可复用且数据驱动的集合组件。这个框架为iOS、macOS、tvOS以及watchOS等Apple平台提供了强大的界面构建工具,尤其在处理...

    Hibernate_test

    总结来说,"Hibernate_test"涵盖了Hibernate的基础知识,包括对象关系映射、SessionFactory的创建、集合映射、组件映射以及复合主键的处理。通过学习这些内容,开发者可以更有效地利用Hibernate进行数据库操作,提高...

    hibernate组件之间的关联

    组件映射允许将一个类的属性作为另一个类的一部分,类似于 Java 中的嵌套类。使用 @Component 或 @Embeddable 注解来标记可嵌入的组件类,然后在父类中使用 @Embedded 或 @EmbeddableId 来引用它们。 **联合主键...

    Java集合排序及java集合类详解.pdf

    Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构允许程序员以高效的方式处理大量数据。 ##### 1.1 容器简介 容器是Java集合框架的基础概念,它们用于存储对象的集合。容器分为...

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

    此外,Hibernate还支持组件映射,通过`component`元素,可以将对象的内部结构映射到单独的数据库表或表的一部分。组件可以包含属性、其他组件甚至集合。`component`元素的`name`属性指定了属性名,`class`属性是组件...

    commons组件开发文档

    3. **Commons Collections**: 增强了Java的集合框架,提供了各种集合操作,如排序、过滤、映射、集合工厂方法等,还有对双向列表、映射和多值映射的支持。 4. **Commons Net**: 包含了各种网络协议实现,如FTP、...

    Java集合框架常见面试题.pdf

    总结来说,Java集合框架为开发者提供了丰富的数据结构以应对不同场景的需要,从简单的List和Set到复杂的Map结构,再到线程安全的集合实现,每个组件都有其特定的用途和优势。在面试中,理解并能够熟练运用这些集合类...

    mybatis表实体映射代码

    MyBatis是一个强大的Java持久层框架,它简化了数据库与Java应用之间的交互,通过XML或注解的方式将SQL语句映射到Java方法上。在本主题中,我们将深入探讨MyBatis中的表实体映射代码,以及如何利用MyBatis Generator...

    JAVA中的集合和js中集合

    这些组件共同构成了一个强大的数据结构库,支持开发者高效地管理各种类型的数据集合。 #### 接口:规范与标准 Java集合框架的核心是其接口定义,这些接口定义了集合的行为规范: - **`Collection&lt;E&gt;`**:这是最...

    java基础 集合-26-Guava开源组件使用(4)

    Java基础集合系列课程的第26讲聚焦于Guava开源组件的使用,这一部分主要讲解了如何在Java项目中高效地利用Guava库来优化集合操作。Guava是由Google开发并维护的一个强大的Java工具库,它包含了许多实用的集合类、...

    LTE时频网格中PHICH(物理HARQ指示信道)的资源映射

    PHICH(Physical Hybrid ARQ Indicator Channel,物理混合自动重传指示信道)是其中的一个关键组件,用于在下行链路中向用户设备(UE)发送关于接收数据包是否正确解码的HARQ(Hybrid Automatic Repeat reQuest,...

    集合框架和集合类介绍.doc

    集合框架提供了多种数据结构,如列表、集和映射,用于组织和操作数据。 首先,我们来看集合接口`Collection`,它是所有集合类的基础接口。`Collection`接口定义了存储一组对象的基本操作,如添加元素、删除元素和...

    java开发工具组件包

    - 集合操作:提供对Java集合框架的增强,如便利的列表、映射操作,或者集合的排序、过滤等。 2. **文档(doc)** - `doc`目录通常存放项目的文档资料,这可能包括API参考文档、用户手册、设计文档等。 - API参考...

    Java集合类原理详解.pdf

    它提供了一种灵活高效的方式来存储和访问对象集合,支持多种数据结构,如列表(List)、集(Set)、映射(Map)等。 ##### 1.1.1 容器简介 容器是指能够存储多个对象的结构。容器的使用场景广泛,比如存储员工信息、...

    react-ReactCollectionHelpers一套可组合用来操作JS集合的工具组件

    在React项目中,我们常常需要对组件状态中的数据进行各种操作,例如过滤、映射、查找等,React Collection Helpers 正是为了简化这些任务而生。 首先,让我们了解`joshwcomeau-react-collection-helpers-335b56a`这...

    集合与图论专业课简介

    函数是集合论中的一个重要工具,它描述了一种一对一或者一对多的映射关系。函数的性质,如单射、满射和双射,以及函数的合成,都是深入理解函数概念的关键。 基数是集合论中的另一重要概念,它衡量了集合的“大小”...

Global site tag (gtag.js) - Google Analytics