Hibernate中的集合
Hibernate中的集合分为四类:
1.bag类:元素无序,可重复
2.set类:元素无序,不可重复
3.list类:元素有序,可重复
4.array类:数组
5.map类:映射关系
除bag类集合外,其它集合都可以在java api中找到对应的接口类,
bag可以认为对应java中的List
Hibernate中将集合分为2类:
一是值集合,集合中存储的都是基本数据类型,包括String类型,及其它可识别的数据库类型
二是实体集合,集合中存储已经映射了的实体对象,反应对象间的关系。
以班级和学生为例:
建表sql语句:
CREATE DATABASE `hibernatetest`
CHARACTER SET 'utf8';
USE `hibernatetest`;
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`classId` int(11) ,
foreign key (`classId`) references classes(`id`),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Classes.java
package com.domain;
import java.util.ArrayList;
import java.util.List;
public class Classes implements java.io.Serializable {
private Integer id;
private String name;
//Hibernate里的bag集合对应java里的List
private List studentNames = new ArrayList();
public Classes() {
}
public Classes(String name) {
this.name = name;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public List getStudentNames() {
return studentNames;
}
public void setStudentNames(List studentNames) {
this.studentNames = studentNames;
}
}
Student.java:
package com.domain;
public class Student implements java.io.Serializable {
private Integer id;
private String name;
public Student() {
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Classes.hbm.xml:
<?xml version="1.0" encoding="utf-8"?>
<!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.domain.Classes" table="classes" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" />
</property>
<bag name="studentNames" table="student">
<!-- key对应的都是外键,其意思也就是拿该外键和<id>的主键值匹配,取集合 -->
<key column="classId"></key>
<element column="name" type="string"></element>
</bag>
</class>
</hibernate-mapping>
Student.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.domain" auto-import="true">
<class name="Student" table="student" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" not-null="true" />
</property>
</class>
</hibernate-mapping>
测试类:
package com.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.domain.Classes;
import com.domain.Student;
public class TestInsert {
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
//定义班级0201班
Classes classes = new Classes();
classes.setName("0201new");
classes.getStudentNames().add("studentnew1");
classes.getStudentNames().add("studentnew2");
session.save(classes);
tx.commit();
session.close();
/**
执行的sql:
Hibernate: insert into classes (name) values (?)
Hibernate: insert into student (classId, name) values (?, ?)
Hibernate: insert into student (classId, name) values (?, ?)
*/
}
}
分享到:
相关推荐
Hibernate是Java领域中一款著名...总之,`hibernate-release-5.0.7.Final`版本的jar包集合是Java开发者进行ORM编程的强大工具,涵盖了从数据持久化到事务处理、验证和缓存等多个方面,极大地提升了开发效率和代码质量。
- **HQL(Hibernate Query Language)**:面向对象的查询语言,类似于SQL,但操作的是对象和对象集合。 - **Criteria API**:提供动态构建查询的方式,无需预先编写查询字符串,更加安全。 6. **缓存策略**: - ...
例如,@LazyCollection和@Fetch(FetchMode.JOIN)可以控制集合属性的加载策略,@Cascade则能设置级联操作的行为,如保存、删除等。 总的来说,Hibernate-annotations-3.4.0.GA是Hibernate框架中的一把利器,它通过...
2. 选择合适的映射策略:理解懒加载、立即加载和集合的加载策略,避免N+1查询问题。 3. 优化查询:避免在HQL中使用子查询,尽量使用JOIN,合理设置缓存策略。 4. 谨慎使用事务:根据业务需求,正确设置事务隔离级别...
在这个“hibernate-3.3.2.GA-jar包集合”中,我们聚焦的是Hibernate 3.3.2 GA版本,这是一个稳定且广泛使用的版本。 1. **Hibernate核心概念**: - **对象关系映射(ORM)**: ORM是Hibernate的核心,它通过在Java...
如果违反了任何约束,violations 集合将包含对应的错误信息。 总结,Hibernate Validator 5.2.4.Final.jar 文件是实现高效且易于维护的 Java 对象验证的重要工具。通过熟练掌握其核心概念和用法,开发者可以有效地...
4. **JAR包**:Java Archive (JAR) 文件是Java平台特有的归档格式,用于集合多个类文件、资源文件和其他相关文件。在Hibernate中,JAR包包含了框架的实现和库,如核心API、持久化引擎、C3P0连接池等。 5. **Eclipse...
本资源集合包含`hibernate-distribution-3.6.2`版本的API中文文档以及相关的jar包,旨在帮助开发者更好地理解和使用Hibernate框架。 首先,`hibernate-reference.pdf`是Hibernate 3.6.2的中文参考手册。这份PDF文档...
在深入探讨`hibernate-mapping`参数之前,我们先理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。`hibernate-mapping`是Hibernate配置...
### HIBERNATE - 符合Java习惯的关系数据库持久化:深入解析与实践 #### 一、概述 Hibernate是Java领域内最受欢迎的对象关系映射(ORM)框架之一,它简化了Java应用程序与关系型数据库之间的交互,使得开发人员...
如果验证失败,`Validator`会返回一个包含错误信息的`ConstraintViolation`集合,供开发者处理异常情况。 总之,`Hibernate Validator`是Java Web开发中后台验证的重要工具,它与`validation-api`和`jboss-logging`...
1. **延迟加载(Lazy Loading)增强**:Hibernate核心库已经支持延迟加载,但扩展可能提供了更精细的控制,例如按需加载关联的对象集合,减少内存占用和提高性能。 2. **批量操作**:批量插入、更新和删除功能可以...
- **概述**:JBoss Tools是面向Java开发者的全面集成开发环境(IDE)插件集合,支持Eclipse、Spring、JBoss等技术栈,其中包含有hibernate-tools组件。 - **安装**:访问JBoss Tools官方网站,下载对应Eclipse版本...
通过批处理、延迟加载、集合分页、缓存策略等手段,可以有效优化Hibernate的性能,降低数据库压力。 总结,Hibernate 5.2.3.Final版本提供了稳定且功能丰富的ORM服务,对于Java开发者来说,深入理解并熟练运用这些...
4. `commons-collections.jar`: Apache Commons Collections提供了对集合操作的扩展,包括各种实用工具类和算法。 5. `commons-logging.jar`: Commons Logging是Apache的一个日志接口库,提供了一个简单的API来抽象...
7. **懒加载注解**:@LazyCollection和@Fetch定义了集合字段的加载策略,可以实现懒加载或立即加载。 8. **时间戳注解**:@Temporal和@CreationTimestamp、@UpdateTimestamp可以自动管理记录的创建和更新时间。 9....
Hibernate通过外键映射和集合映射处理这些关系,如@ManyToOne、@OneToMany、@ManyToMany等。 十、 Hibenate事件监听器 通过实现特定接口,如PreInsertEventListener,可以定制在特定事件(如对象插入前)发生时执行...
4. **Commons-Collections**:提供一些集合操作的增强,用于优化Hibernate的性能。 5. **JTA、JPA相关的API库**:如javax.transaction-api.jar,javax.persistence-api.jar等,根据具体应用场景可能需要。 **使用...
包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等关系映射,以及集合的元素类型(List、Set、Map等)和级联操作(CascadeType)。 总结,`hibernate-release-4.2.3....
- `@LazyCollection(LazyCollectionOption.EXTRA)`: 实现懒加载,只在真正访问集合时加载数据。 - `@Fetch(FetchMode.JOIN)`: 实时加载,查询时将关联数据一同加载。 7. **索引与唯一性** - `@Index`: 在表中...