为了映射实体中的集合属性,Hibernate提供了set, list, array, bag, map类型。
1. set
经常使用,实体对象不重复,没有顺序。对应实体类中的java.util.Set类型。
2. list
可以记录实体插入数据库的顺序。对应实体类中的java.util.List类型。
修改Department类:
private List<Employee> employees;
// Getters and setters are omitted
修改Department.hbm.xml:
<class name="Department">
<list name="employees" lazy="true">
<key column="depart_id" not-null="true"/>
<list-index column="em_order"/>
<one-to-many class="Employee"/>
</list>
</class>
key指定employee表中的外键名。
list-index指定employee表中记录插入次序的字段。
Hibernate启动后,会生成下面的employee表:
id | name | depart_id | em_order |
3. bag
和list类似,也是对应实体类中的java.util.List类。不同的是没有记录记录插入的顺序。
修改Department类:
和2相同。
修改Department.hbm.xml
<class name="Department">
<bag name="employees">
<key column="depart_id"/>
<one-to-many class="Employee"/>
</bag>
</class>
生成的employee表:
4. array
和list类似,可以记录插入次序。对应的是实体类中的数组。
修改Department类:
private Employee[] employees;
修改Department.hbm.xml:
<class name="Department">
<array name="employees" cascade="save-update">
<key column="department_id" not-null="true"/>
<list-index column="emp_index" base="1"/>
<one-to-many class="Employee"/>
</array>
</class>
base指定序号从多少开始。
5. map
不仅映射属性值,还映射属性键。所以,除了指定外键列外,还需要指定属性键列(如果没有指定,hibernate会默认生成一列)。系统将以外键列和key列作为联合主键。
修改Department类:
private Map<String, Employee> employees;
// Getters and setters are omitted
修改Department.hbm.xml:
<class name="Department">
<map name="employees" cascade="save-update">
<key column="department_id"/>
<map-key type="java.lang.String" column="ind"/>
<one-to-many class="Employee"/>
</map>
</class>
在Employee类和映射文件中加入ind的声明。
测试代码:
public void testMapSave() {
Session s = null;
Transaction tx = null;
Department depart = new Department("FDI");
Employee em1 = new Employee("Jacy");
Employee em2 = new Employee("Neil");
Map<String, Employee> employees = new HashMap<String, Employee>();
employees.put(em1.getName(), em1);
employees.put(em2.getName(), em2);
depart.setEmployees(employees);
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(depart);
tx.commit();
} catch (HibernateException e) {
if (tx != null)
tx.rollback();
e.printStackTrace();
} finally {
if (s != null)
s.close();
}
}
生成的employee表:
id | name | ind | department_id |
1 | Jacy | Jacy | 1 |
2 | Neil | Neil | 1 |
在代码中指定的键就会保存到ind列中。
分享到:
相关推荐
Hibernate提供了`<order-by>`和`<composite-element>`标签来实现集合元素的排序,以及`<bag>`集合类型来支持无序集合。对于复杂的数据结构,如嵌套集合,可以使用`<composite-element>`定义复合元素。 综上所述,...
对于数组和集合,如List、Set、Map等,Hibernate提供了ListType、SetType、MapType等映射类型,可以根据实际需求选择。 此外,自定义对象的映射是Hibernate映射中的一个重要部分。通过在实体类上使用@Entity注解,...
本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合关系"、"student与class的多对一"以及"一对多映射"的概念。 首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体...
Hibernate集合映射是ORM的重要组成部分,它使得Java对象和数据库表之间的关系更加直观和灵活。根据实际需求选择合适的集合类型,可以有效地处理复杂的数据关系。在实际应用中,应结合业务场景、数据特性以及性能需求...
此外,还可以通过设置 `<set>` 标签的 `fetch` 属性来控制查询策略,比如使用 `fetch="subselect"` 来预加载集合的大小,或者使用 `batch-size` 来批量加载一定数量的关联记录,进一步优化性能。 总的来说,...
Set 集合是 Hibernate 中基础的集合类型,元素数据一般使用外键同主表关联。Set 集合非常适用于集合元素不能重复的情况。Set 集合是无序的,集合元素并不是按照一定的顺序排列的。 List 集合映射 List 集合是有序...
正确配置和使用各种集合类型,如List、Set和Map,可以帮助我们更好地处理数据库中的复杂关系,提高代码的灵活性和可扩展性。同时,关注性能优化策略,如懒加载和批处理,对于大型项目尤为重要。
1. **集合类型**:Hibernate支持多种集合类型映射,如Set、List、ArrayList、LinkedList、Map等。Set是最常见的集合映射类型,它不允许重复元素,与数据库中的唯一约束相对应。 2. **元素类型**:集合中的每个元素...
总之,Hibernate集合映射是对象关系映射的重要组成部分,理解并熟练掌握各种映射类型、级联操作、缓存策略等,将有助于我们在实际开发中更高效、更灵活地处理数据库与Java对象之间的关系。在实践中,不断调整和优化...
"bag"是Hibernate中的一种集合类型,表示无序的、可重复的对象集合。在数据库层面,这通常对应于一个无特定排序且可能包含重复值的表。在Java代码中,你可以将bag映射为ArrayList或者LinkedList,尽管它们在内存中的...
`classmate`库是`Hibernate Validator`的一部分,它负责处理类型相关的元数据,如泛型信息,这对于正确解析和执行验证规则至关重要。 `Jboss-logging`是一个日志框架,被广泛用于各种开源项目,包括`Hibernate ...
3. **数据库驱动**:例如mysql-connector-java,对应所使用的数据库类型,用于连接数据库。 4. **JDBC API**:如javax.sql和java.sql,为数据库操作提供基础接口。 5. **Servlet和JSP**:servlet-api和jsp-api,是...
这里的"List"是Java集合框架中的一个接口,用于存储一组有序的元素,而在Hibernate中,它常用来映射数据库中的数组、列表或集合类型的数据。本文将详细探讨如何使用Hibernate映射集合属性List,以及如何让Hibernate...
例如,如果 `Person` 类有一个集合类型的属性 `Set<PhoneNumber>`,那么就可以定义一个单向集合关联。 - **1.3.3 处理关联** 学习如何在代码中访问和修改关联关系,包括如何使用集合操作方法(如 add、remove 等...
1. **元素类型**:在Hibernate中,List集合可以包含任何Java对象,这些对象可以是基本类型,也可以是自定义的复杂类型。 2. **关联关系**:List集合通常与数据库的一张表进行关联,通过外键字段建立一对一、一对多...
Hibernate,作为Java中广泛使用的对象关系映射(ORM)框架,提供了一种优雅的方式来映射枚举类型到数据库。本文将深入探讨Hibernate如何映射枚举类型,并给出实际应用示例。 ### Hibernate枚举映射方式 #### 1. `@...
在Hibernate 3.2.3之后的版本,对于单个实体或组件属性的关联,仍然可以用英文点号隐式连接,但集合属性(如1-N、N-N关联)必须使用`join`显示连接。对于集合属性的延迟加载问题,可以通过在映射文件中设置`lazy=...
1. **集合类型**:在Hibernate中,集合类型通常有List、Set、Map和Bag等。List保证元素顺序,可能有重复元素;Set不允许有重复元素,不保证元素顺序;Map则存储键值对,其中键是唯一的;Bag则与List类似,但不保证...
6. **整合Hibernate和Spring**:使用Spring的Hibernate支持,配置SessionFactory,可以通过`<bean>`标签创建SessionFactory并注入到需要的地方。 7. **测试**:编写单元测试和集成测试,验证SSH整合是否成功,确保...