`
ttitfly
  • 浏览: 623899 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hibernate-------集合

阅读更多
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-release-5.0.7.Final的所有jar包

    Hibernate是Java领域中一款著名...总之,`hibernate-release-5.0.7.Final`版本的jar包集合是Java开发者进行ORM编程的强大工具,涵盖了从数据持久化到事务处理、验证和缓存等多个方面,极大地提升了开发效率和代码质量。

    hibernate-release-4.3.10.Final.zip

    - **HQL(Hibernate Query Language)**:面向对象的查询语言,类似于SQL,但操作的是对象和对象集合。 - **Criteria API**:提供动态构建查询的方式,无需预先编写查询字符串,更加安全。 6. **缓存策略**: - ...

    Hibernate-annotations-3.4最新版本

    例如,@LazyCollection和@Fetch(FetchMode.JOIN)可以控制集合属性的加载策略,@Cascade则能设置级联操作的行为,如保存、删除等。 总的来说,Hibernate-annotations-3.4.0.GA是Hibernate框架中的一把利器,它通过...

    hibernate-release-5.0.0.Final(1).zip

    2. 选择合适的映射策略:理解懒加载、立即加载和集合的加载策略,避免N+1查询问题。 3. 优化查询:避免在HQL中使用子查询,尽量使用JOIN,合理设置缓存策略。 4. 谨慎使用事务:根据业务需求,正确设置事务隔离级别...

    hibernate-3.3.2.GA-jar包集合

    在这个“hibernate-3.3.2.GA-jar包集合”中,我们聚焦的是Hibernate 3.3.2 GA版本,这是一个稳定且广泛使用的版本。 1. **Hibernate核心概念**: - **对象关系映射(ORM)**: ORM是Hibernate的核心,它通过在Java...

    hibernate-validator-5.2.4.Final.jar

    如果违反了任何约束,violations 集合将包含对应的错误信息。 总结,Hibernate Validator 5.2.4.Final.jar 文件是实现高效且易于维护的 Java 对象验证的重要工具。通过熟练掌握其核心概念和用法,开发者可以有效地...

    hibernate-release-4.2.4.Final.zip

    4. **JAR包**:Java Archive (JAR) 文件是Java平台特有的归档格式,用于集合多个类文件、资源文件和其他相关文件。在Hibernate中,JAR包包含了框架的实现和库,如核心API、持久化引擎、C3P0连接池等。 5. **Eclipse...

    hibernate-distribution-3.6.2 API及jar包

    本资源集合包含`hibernate-distribution-3.6.2`版本的API中文文档以及相关的jar包,旨在帮助开发者更好地理解和使用Hibernate框架。 首先,`hibernate-reference.pdf`是Hibernate 3.6.2的中文参考手册。这份PDF文档...

    hibernate-mapping参数详解

    在深入探讨`hibernate-mapping`参数之前,我们先理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。`hibernate-mapping`是Hibernate配置...

    HIBERNATE - 符合Java习惯的关系数据库持久化

    ### HIBERNATE - 符合Java习惯的关系数据库持久化:深入解析与实践 #### 一、概述 Hibernate是Java领域内最受欢迎的对象关系映射(ORM)框架之一,它简化了Java应用程序与关系型数据库之间的交互,使得开发人员...

    后台验证hibernate-validator必须的jar包

    如果验证失败,`Validator`会返回一个包含错误信息的`ConstraintViolation`集合,供开发者处理异常情况。 总之,`Hibernate Validator`是Java Web开发中后台验证的重要工具,它与`validation-api`和`jboss-logging`...

    hibernate-extensions-2.1.3

    1. **延迟加载(Lazy Loading)增强**:Hibernate核心库已经支持延迟加载,但扩展可能提供了更精细的控制,例如按需加载关联的对象集合,减少内存占用和提高性能。 2. **批量操作**:批量插入、更新和删除功能可以...

    hibernate-tools教程

    - **概述**:JBoss Tools是面向Java开发者的全面集成开发环境(IDE)插件集合,支持Eclipse、Spring、JBoss等技术栈,其中包含有hibernate-tools组件。 - **安装**:访问JBoss Tools官方网站,下载对应Eclipse版本...

    hibernate-release-5.2.3.Final

    通过批处理、延迟加载、集合分页、缓存策略等手段,可以有效优化Hibernate的性能,降低数据库压力。 总结,Hibernate 5.2.3.Final版本提供了稳定且功能丰富的ORM服务,对于Java开发者来说,深入理解并熟练运用这些...

    hibernate-3.2 jar包

    4. `commons-collections.jar`: Apache Commons Collections提供了对集合操作的扩展,包括各种实用工具类和算法。 5. `commons-logging.jar`: Commons Logging是Apache的一个日志接口库,提供了一个简单的API来抽象...

    hibernate-annotations-3.4.0.GA.chm中文版

    7. **懒加载注解**:@LazyCollection和@Fetch定义了集合字段的加载策略,可以实现懒加载或立即加载。 8. **时间戳注解**:@Temporal和@CreationTimestamp、@UpdateTimestamp可以自动管理记录的创建和更新时间。 9....

    hibernate-release-5.2.10

    Hibernate通过外键映射和集合映射处理这些关系,如@ManyToOne、@OneToMany、@ManyToMany等。 十、 Hibenate事件监听器 通过实现特定接口,如PreInsertEventListener,可以定制在特定事件(如对象插入前)发生时执行...

    hibernate-3.1.3 jar包精简版

    4. **Commons-Collections**:提供一些集合操作的增强,用于优化Hibernate的性能。 5. **JTA、JPA相关的API库**:如javax.transaction-api.jar,javax.persistence-api.jar等,根据具体应用场景可能需要。 **使用...

    hibernate-release-4.2.3.lib.zip

    包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等关系映射,以及集合的元素类型(List、Set、Map等)和级联操作(CascadeType)。 总结,`hibernate-release-4.2.3....

    hibernate-annotations-3.4.0.GA.rar

    - `@LazyCollection(LazyCollectionOption.EXTRA)`: 实现懒加载,只在真正访问集合时加载数据。 - `@Fetch(FetchMode.JOIN)`: 实时加载,查询时将关联数据一同加载。 7. **索引与唯一性** - `@Index`: 在表中...

Global site tag (gtag.js) - Google Analytics