hibernate详解(三)----->>组件映射(一)
Hibernate建议在进行领域模型建模时要细粒度一些,简单地说,就是类要比表多,这种映射方式就是组件(component)映射。
组件类是值类型的,即它没有对象标识符属性,在数据库中也没有对应的表,它只隶属于另一个持久化类的实例。它的数据被嵌入到所隶属的持久化实例对应的数据库表的记录中。
组件映射的应用有三种常见情况:把组件类作为持久化类的单个属性来使用、把组件类作为持久化类的集合属性来使用、把组件类作为持久化类的对象标识符来使用。下面分别来介绍。
1、组件类作为持久化类的单个属性
定义一个Address类(它是值类型的),代码如下:
Address.java
package com.zxf.domain;
/**
* 地址类
* 值类型,它没有对象标识符属性。
* 只能隶属于一个持久化类的实例,它的数据也是被嵌入到所隶属的持久化实例对应的数据库表的记录的。
*/
public class Address {
private String province; //省份名
private String city; //城市
private String detail; //地址详情,如街道,小区,门牌号等
private String zipcode; //邮编
private String telephone; //固定电话
private String mobilephone; //移动电话
public Address(){} //无参数的构造方法
//以下省略所有属性的getters和setters方法...
}
Customer.java
package com.zxf.domain;
/** 客户持久化类(实体类) */
public class Customer {
private Long id; //对象标识符(OID)
private String loginname; //登录名
private String password; //密码
private String email; //邮箱号
private Address homeAddress; //联系地址
private Address deliverAddress; //送货地址
public Customer(){} //无参数的构造方法
//以下省略所有属性的getters和setters方法...
}
Customer.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.zxf.domain.Customer" table="customer">
<id name="id" column="id" type="long">
<generator class="native" />
</id>
<property name="loginname" not-null="true"/>
<property name="password" not-null="true"/>
<property name="email"/>
<!-- 用component元素映射组件类属性homeAddress -->
<component name="homeAddress" class="com.zxf.domain.Address">
<!-- 用property映射组件类的每个属性 -->
<property name="province" column="home_province"/>
<property name="city" column="home_city"/>
<property name="detail" column="home_detail"/>
<property name="zipcode" column="home_zipcode"/>
<property name="telephone" column="home_telephone"/>
<property name="mobilephone" column="home_mobilephone"/>
</component>
<!-- 用component元素映射组件类属性deliverAddress -->
<component name="deliverAddress" class="com.zxf.domain.Address">
<property name="province" column="deliver_province"/>
<property name="city" column="deliver_city"/>
<property name="detail" column="deliver_detail"/>
<property name="zipcode" column="deliver_zipcode"/>
<property name="telephone" column="deliver_telephone"/>
<property name="mobilephone" column="deliver_mobilephone"/>
</component>
</class>
</hibernate-mapping>
配置文件:hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库方言设置 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLInnoDBDialect
</property>
<!-- 数据库连接参数设置 -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!--实际操作数据库时是否显示SQL -->
<!--
<property name="hibernate.show_sql">true</property>-->
<property name="hibernate.format_sql">true</property>
<!--将数据库schema的DDL导出到数据库 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 以下定义实体类与数据库表的映像文件 -->
<mapping resource="com/zxf/domain/Customer.hbm.xml" />
</session-factory>
</hibernate-configuration>
2、组件类作为持久化类的集合属性
Photo.java
package com.zxf.domain;
/** 照片类--值类型 */
public class Photo {
private String name; //照片名
private String filePath; //照片存放路径
private String description; //描述
private int width; //原始宽度
private int height; //原始高度
public Photo(){} //无参数的构造方法
//以下省略所有属性的getters和setters方法...
}
Album.java
package com.zxf.domain;
import java.util.Date;
import java.util.List;
/** 相册持久化类(实体类) */
public class Album {
private Long id; //对象标识符(OID)
private String title; //相册名
private String description; //描述
private Date creationTime; //建立时间
private List<Photo> photos; //照片集
public Album(){} //无参数的构造方法
//以下省略所有属性的getters和setters方法...
}
Album.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.zxf.domain.Album" table="album">
<!-- 映射对象标识符 -->
<id name="id" column="id" type="long">
<!-- 指定对象标识符生成器 -->
<generator class="native" />
</id>
<!-- 用property映射每个普通属性 -->
<property name="title"/>
<property name="description"/>
<property name="creationTime" column="creation_time"/>
<!-- 用bag来映射List集合属性 -->
<bag name="photos" table="photo">
<!-- key元素:指定集合属性对应的表的外键列 -->
<key column="album_id" not-null="true" />
<!-- composite-element元素:映射集合里的元素
class属性:指定集合里的元素的类类型
-->
<composite-element class="com.zxf.domain.Photo">
<!-- 用property映射每个普通属性 -->
<property name="name" />
<property name="filePath" column="file_path" />
<property name="description" />
<property name="width" />
<property name="height" />
</composite-element>
</bag>
</class>
</hibernate-mapping>
配置文件:hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库方言设置 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLInnoDBDialect
</property>
<!-- 数据库连接参数设置 -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!--实际操作数据库时是否显示SQL -->
<!--
<property name="hibernate.show_sql">true</property>-->
<property name="hibernate.format_sql">true</property>
<!--将数据库schema的DDL导出到数据库 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 以下定义实体类与数据库表的映像文件 -->
<mapping resource="com/zxf/domain/Album.hbm.xml" />
</session-factory>
</hibernate-configuration>
3、组件类作为持久化类的对象标识符属性
详见hibernate详解(三)----->>组件映射(二)之复合主键
分享到:
相关推荐
"hibernate-common-annotations.jar"是Hibernate框架中的一个关键组件,它提供了对JPA(Java Persistence API)注解的支持,使得开发者能够更加便捷地进行对象持久化操作。本文将深入探讨这个jar文件及其在Hibernate...
Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够用面向对象的方式来处理数据。本资源包“hibernate-release-4.2.13.Final.tgz”提供了一个完整的Hibernate ...
Hibernate是一个开源的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以通过面向对象的方式来处理数据。通过此压缩包,用户可以获取到所需的所有JAR文件以及可能的Eclipse插件,以便捷地在开发环境中...
在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问细节。本文将深入探讨Hibernate配置文件,这是使用Hibernate进行数据库...
--指定 Hibernate 映射文件路径 --> <mapping resource="com/Hibernate/test_products.hbm.xml" /> </session-factory> </hibernate-configuration> ``` 在该文件中,我们可以看到有多个关键的配置项: * `...
《Hibernate 4.3.0 Beta2 库详解》 Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发中的重要工具,它极大地简化了数据库操作,使得开发者能够用面向对象的方式来处理数据。本篇文章将深入探讨 ...
3. Hibernate的核心组件: - SessionFactory:它是线程不安全的,用于创建Session实例,是整个Hibernate的配置信息和数据库会话工厂。 - Session:代表一次数据库会话,处理数据的增删查改操作。 - Transaction:...
Hibernate,作为Java领域中的一个著名ORM(对象关系映射)框架,它极大地简化了数据库操作,使得开发者能够以面向对象的方式来处理数据库交互。这次我们关注的是Hibernate 4.3.9.Final版本,它包含了“required”...
Hibernate,作为一个开源的对象关系映射(ORM)框架,是Java开发中的重要工具,它极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将深入探讨Hibernate 4.2.2.Final版本的特性、整合框架的...
《Hibernate 3.6.6.Final:Java ORM框架的核心详解》 Hibernate,作为一个强大的对象关系映射(ORM)框架,极大地简化了Java开发者在处理数据库操作时的工作。本篇文章将深入探讨`hibernate-distribution-3.6.6....
Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发中的重要工具。本资源集合包含`hibernate-distribution-3.6.2`版本的API中文文档以及相关的jar包,旨在帮助开发者更好地理解和使用Hibernate框架。 ...
三、hibernate-core-1a8aca9.ta内容详解 这个压缩包包含了以下关键部分: - Hibernate的主库:包括核心的ORM处理类、接口以及实现。 - 持久化模型:定义了实体类和映射元数据,如Hibernate注解或XML配置文件。 - ...
三、Hibernate 的核心组件 1. Configuration:配置 Hibernate,加载映射文件,建立 SessionFactory。 2. SessionFactory:是线程不安全的,负责创建 Session 对象,是整个应用的单例对象。 3. Session:是操作数据库...
Hibernate,作为一个开源的对象关系映射(ORM)框架,极大地简化了Java开发者在数据库操作中的工作。在这个专题中,我们将深入探讨Hibernate 4.3.5.Final版本,它是Hibernate发展历史中的一个重要里程碑,为开发人员...
《Hibernate Commons Annotations 3.1.0.GA详解》 Hibernate Commons Annotations(简称HCA)是Hibernate框架的一个重要组成部分,它提供了一套用于在Java类和字段上定义元数据的API,这些元数据用于驱动Hibernate...
《Hibernate Tools更新4.1.1.Final版详解与应用》 Hibernate Tools是开发者在使用Hibernate框架进行Java应用程序开发时的重要辅助工具,它为Eclipse IDE提供了强大的集成支持,包括对象关系映射(ORM)的可视化设计...
《Hibernate框架详解——基于hibernate-distribution-3.3.1版本》 Hibernate,作为Java领域中的一个著名持久化框架,为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更为简单。本文...
《Hibernate核心组件:hibernate-annotations-3.4.0.jar详解》 在Java世界里,ORM(Object-Relational Mapping)框架是连接数据库的重要工具,其中Hibernate作为一款广泛应用的ORM框架,大大简化了数据库操作。而`...
《Hibernate 4.2.21.Final:高级版本与兼容性详解及学习指南》 Hibernate,作为Java领域中的一款主流对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者能够更加专注于业务逻辑而不是数据库交互。官方...
在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细解析Hibernate的配置文件,帮助你深入理解其工作原理和配置过程。 ...