场景:一个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
分享到:
相关推荐
例如,LINQ to SQL或Entity Framework等ORM(对象关系映射)工具就实现了这种映射,使得开发者可以用面向对象的方式处理数据库操作。 5. **WinForm基础**: Windows Forms是.NET Framework提供的一种用于构建桌面...
在本文中,我们将深入探讨如何使用React Native和Exponent来构建一个可展开的列表集合组件。React Native是一种流行的JavaScript框架,用于开发原生移动应用程序,而Exponent则是一个平台,可以简化React Native应用...
2. **集合型C++类的组件化**:集合型C++类管理一组其他C++对象,如数组、列表或映射表。为了组件化,需要处理集合对象及其管理的元素对象。当集合对象和元素对象都被包装成组件后,集合型ATL对象需要有释放所有元素...
CollectionKit 是一个针对Swift编程语言设计的现代框架,其核心目标是帮助开发者高效地构建可复用且数据驱动的集合组件。这个框架为iOS、macOS、tvOS以及watchOS等Apple平台提供了强大的界面构建工具,尤其在处理...
总结来说,"Hibernate_test"涵盖了Hibernate的基础知识,包括对象关系映射、SessionFactory的创建、集合映射、组件映射以及复合主键的处理。通过学习这些内容,开发者可以更有效地利用Hibernate进行数据库操作,提高...
组件映射允许将一个类的属性作为另一个类的一部分,类似于 Java 中的嵌套类。使用 @Component 或 @Embeddable 注解来标记可嵌入的组件类,然后在父类中使用 @Embedded 或 @EmbeddableId 来引用它们。 **联合主键...
Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构允许程序员以高效的方式处理大量数据。 ##### 1.1 容器简介 容器是Java集合框架的基础概念,它们用于存储对象的集合。容器分为...
此外,Hibernate还支持组件映射,通过`component`元素,可以将对象的内部结构映射到单独的数据库表或表的一部分。组件可以包含属性、其他组件甚至集合。`component`元素的`name`属性指定了属性名,`class`属性是组件...
3. **Commons Collections**: 增强了Java的集合框架,提供了各种集合操作,如排序、过滤、映射、集合工厂方法等,还有对双向列表、映射和多值映射的支持。 4. **Commons Net**: 包含了各种网络协议实现,如FTP、...
总结来说,Java集合框架为开发者提供了丰富的数据结构以应对不同场景的需要,从简单的List和Set到复杂的Map结构,再到线程安全的集合实现,每个组件都有其特定的用途和优势。在面试中,理解并能够熟练运用这些集合类...
MyBatis是一个强大的Java持久层框架,它简化了数据库与Java应用之间的交互,通过XML或注解的方式将SQL语句映射到Java方法上。在本主题中,我们将深入探讨MyBatis中的表实体映射代码,以及如何利用MyBatis Generator...
这些组件共同构成了一个强大的数据结构库,支持开发者高效地管理各种类型的数据集合。 #### 接口:规范与标准 Java集合框架的核心是其接口定义,这些接口定义了集合的行为规范: - **`Collection<E>`**:这是最...
Java基础集合系列课程的第26讲聚焦于Guava开源组件的使用,这一部分主要讲解了如何在Java项目中高效地利用Guava库来优化集合操作。Guava是由Google开发并维护的一个强大的Java工具库,它包含了许多实用的集合类、...
PHICH(Physical Hybrid ARQ Indicator Channel,物理混合自动重传指示信道)是其中的一个关键组件,用于在下行链路中向用户设备(UE)发送关于接收数据包是否正确解码的HARQ(Hybrid Automatic Repeat reQuest,...
集合框架提供了多种数据结构,如列表、集和映射,用于组织和操作数据。 首先,我们来看集合接口`Collection`,它是所有集合类的基础接口。`Collection`接口定义了存储一组对象的基本操作,如添加元素、删除元素和...
- 集合操作:提供对Java集合框架的增强,如便利的列表、映射操作,或者集合的排序、过滤等。 2. **文档(doc)** - `doc`目录通常存放项目的文档资料,这可能包括API参考文档、用户手册、设计文档等。 - API参考...
它提供了一种灵活高效的方式来存储和访问对象集合,支持多种数据结构,如列表(List)、集(Set)、映射(Map)等。 ##### 1.1.1 容器简介 容器是指能够存储多个对象的结构。容器的使用场景广泛,比如存储员工信息、...
在React项目中,我们常常需要对组件状态中的数据进行各种操作,例如过滤、映射、查找等,React Collection Helpers 正是为了简化这些任务而生。 首先,让我们了解`joshwcomeau-react-collection-helpers-335b56a`这...
函数是集合论中的一个重要工具,它描述了一种一对一或者一对多的映射关系。函数的性质,如单射、满射和双射,以及函数的合成,都是深入理解函数概念的关键。 基数是集合论中的另一重要概念,它衡量了集合的“大小”...