心得9-hibernate 高级映射之组件映射
2012-12-25 17:59
330 查看
1.
组件映射概述
组件类是值类型的,它没有对象标识符属性,在数据库中没有对应的表,它只隶属于另一个持久化类的实例。
把组件类作为持久化类的单个属性来使用
把组件类作为持久化类的集合属性来使用
2.组件映射(User-Name)
关联的属性是个复杂类型的持久化类,但不是实体即:数据库中没有表与该属性对应,但该类的属性要永久保存的。
<component name=”name” class=”com.test.hibernate.domain.Name”>
<property name=”initial”/>
<property name=”first”/>
<property name=”last”/>
</component>
当组件的属性不能和表中的字段简单对应的时候可以选择实现:
3.
案例分析
把组件类作为持久化类的单个属性来使用
Customers.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
package="com.hbsi.component">
<class
name="Customers"
table="customers">
<id
name="id">
<generator
class="native"/>
</id>
<property
name="name"
column="name"/>
<component
name="homeAddress"
class="Address">
<property
name="province"
column="home_pro"/>
<property
name="city"
column="home_city"/>
<property
name="zipcode"
column="home_zip"/>
<property
name="telephone"
column="home_tele"/>
</component>
<component
name="deliverAddress"
class="Address">
<property
name="province"
column="deliver_pro"/>
<property
name="city"
column="deliver_city"/>
<property
name="zipcode"
column="deliver_zip"/>
<property
name="telephone"
column="deliver_tele"/>
</component>
</class>
</hibernate-mapping>
测试类:TestCustomers.Java
package com.hbsi.component;
import org.hibernate.Session;
import org.junit.Test;
import com.hbsi.utils.HibernateSessionFactory;
public class TestCustomers {
@Test
public void add(){
Customers c = new Customers();
c.setName("张三");
Address homeAddress = new Address();
homeAddress.setProvince("河北省");
homeAddress.setCity("保定市");
homeAddress.setZipcode("071000");
homeAddress.setTelephone("1235345");
c.setHomeAddress(homeAddress);
Address deliverAddress = new Address();
deliverAddress.setProvince("四川省");
deliverAddress.setCity("成都市");
deliverAddress.setZipcode("032700");
deliverAddress.setTelephone("1454655645");
c.setDeliverAddress(deliverAddress);
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
session.save(c);
session.getTransaction().commit();
HibernateSessionFactory.closeSession();
}
}
把组件类作为持久化类的集合属性来使用
Album.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
package="com.hbsi.component">
<class
name="Album"
table="ablum">
<id
name="id">
<generator
class="native"/>
</id>
<property
name="title"
column="title"/>
<bag
name="photos"
table="photos">
<key
column="ablum_id"/>
<composite-element
class="Photos">
<property
name="name"/>
<property
name="filePath"
column="file_path"/>
<property
name="describtion"/>
</composite-element>
</bag>
</class>
</hibernate-mapping>
测试类:AblumTest.Java
package com.hbsi.component;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.junit.Test;
import com.hbsi.utils.HibernateSessionFactory;
public class TestAlbum {
@Test
public void add(){
Album album = new Album();
album.setTitle("大学时光");
List<Photos> photos = new ArrayList<Photos>();
Photos p1 = new Photos();
p1.setName("p1");
p1.setFilePath("d:\\picture");
p1.setDescribtion("那一年");
Photos p2 = new Photos();
p2.setName("p2");
p2.setFilePath("d:\\picture");
p2.setDescribtion("这些年");
photos.add(p1);
photos.add(p2);
album.setPhotos(photos);
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
session.save(album);
session.getTransaction().commit();
HibernateSessionFactory.closeSession();
}
}
组件映射概述
组件类是值类型的,它没有对象标识符属性,在数据库中没有对应的表,它只隶属于另一个持久化类的实例。
把组件类作为持久化类的单个属性来使用
把组件类作为持久化类的集合属性来使用
2.组件映射(User-Name)
关联的属性是个复杂类型的持久化类,但不是实体即:数据库中没有表与该属性对应,但该类的属性要永久保存的。
<component name=”name” class=”com.test.hibernate.domain.Name”>
<property name=”initial”/>
<property name=”first”/>
<property name=”last”/>
</component>
当组件的属性不能和表中的字段简单对应的时候可以选择实现:
3.
案例分析
把组件类作为持久化类的单个属性来使用
Customers.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
package="com.hbsi.component">
<class
name="Customers"
table="customers">
<id
name="id">
<generator
class="native"/>
</id>
<property
name="name"
column="name"/>
<component
name="homeAddress"
class="Address">
<property
name="province"
column="home_pro"/>
<property
name="city"
column="home_city"/>
<property
name="zipcode"
column="home_zip"/>
<property
name="telephone"
column="home_tele"/>
</component>
<component
name="deliverAddress"
class="Address">
<property
name="province"
column="deliver_pro"/>
<property
name="city"
column="deliver_city"/>
<property
name="zipcode"
column="deliver_zip"/>
<property
name="telephone"
column="deliver_tele"/>
</component>
</class>
</hibernate-mapping>
测试类:TestCustomers.Java
package com.hbsi.component;
import org.hibernate.Session;
import org.junit.Test;
import com.hbsi.utils.HibernateSessionFactory;
public class TestCustomers {
@Test
public void add(){
Customers c = new Customers();
c.setName("张三");
Address homeAddress = new Address();
homeAddress.setProvince("河北省");
homeAddress.setCity("保定市");
homeAddress.setZipcode("071000");
homeAddress.setTelephone("1235345");
c.setHomeAddress(homeAddress);
Address deliverAddress = new Address();
deliverAddress.setProvince("四川省");
deliverAddress.setCity("成都市");
deliverAddress.setZipcode("032700");
deliverAddress.setTelephone("1454655645");
c.setDeliverAddress(deliverAddress);
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
session.save(c);
session.getTransaction().commit();
HibernateSessionFactory.closeSession();
}
}
把组件类作为持久化类的集合属性来使用
Album.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
package="com.hbsi.component">
<class
name="Album"
table="ablum">
<id
name="id">
<generator
class="native"/>
</id>
<property
name="title"
column="title"/>
<bag
name="photos"
table="photos">
<key
column="ablum_id"/>
<composite-element
class="Photos">
<property
name="name"/>
<property
name="filePath"
column="file_path"/>
<property
name="describtion"/>
</composite-element>
</bag>
</class>
</hibernate-mapping>
测试类:AblumTest.Java
package com.hbsi.component;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.junit.Test;
import com.hbsi.utils.HibernateSessionFactory;
public class TestAlbum {
@Test
public void add(){
Album album = new Album();
album.setTitle("大学时光");
List<Photos> photos = new ArrayList<Photos>();
Photos p1 = new Photos();
p1.setName("p1");
p1.setFilePath("d:\\picture");
p1.setDescribtion("那一年");
Photos p2 = new Photos();
p2.setName("p2");
p2.setFilePath("d:\\picture");
p2.setDescribtion("这些年");
photos.add(p1);
photos.add(p2);
album.setPhotos(photos);
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
session.save(album);
session.getTransaction().commit();
HibernateSessionFactory.closeSession();
}
}
相关文章推荐
- 心得9-hibernate 高级映射之组件映射
- Hibernate高级实体关联映射之多值的实体关联(用组件类实现三重关联,单向导航)
- 心得10-hibernate 高级映射之继承映射
- 心得8-hibernate 高级映射
- 心得10-hibernate 高级映射之继承映射
- 心得8-hibernate 高级映射
- Hibernate高级映射 --- 组件映射
- Hibernate映射(七)— 组件
- 【Hibernate框架开发之六】Hibernate中Annotation的关系映射&&组件映射!
- hibernate 高级映射 -->张国亮总结第一季
- Hibernate读书笔记-----Hibernate的关联映射之组件属性关联关系
- Hibernate高级映射 --- 集合映射
- Hibernate学习_011_组件映射
- Hibernate 映射组件属性
- 更方便的数据模式:Hibernate高级映射技术——自定义数据类型StringList
- Hibernate 第十讲 表关联关系(六)组件映射
- Hibernate之映射值类型集合(组件的集合之list)
- Hibernate高级实体关联映射之单值的实体关联(用联结表映射)
- Hibernate高级实体关联映射之多值的实体关联(一对多关联,利用联结表,set例)
- Hibernate组件映射