Hibernate一对多单向关联映射
2007-10-15 19:17
441 查看
一对多关联映射(单向)
1、People.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 default-lazy="false">
<class name="com.persistent.People" table="people">
<id name="id" column="peopleId" unsaved-value="0">
<generator class="increment">
</generator>
</id>
<property name="name" column="name"></property>
<set name="addresses">
<key column="peopleId" not-null="true"/>
<one-to-many class="com.persistent.Address"/>
</set>
</class>
</hibernate-mapping>
2、address.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.persistent.Address" table="address">
<id name="id" column="addressId" unsaved-value="0">
<generator class="increment">
</generator>
</id>
<property name="peopleId" column="peopleId"
insert="false" update="false">
</property>
<property name="addressName" column="addressName"></property>
</class>
</hibernate-mapping>
3、测试程序
Session session = HibernateSessionFactory.getSession();
session.beginTransaction();
List result = session.createQuery("from People").list();
session.getTransaction().commit();
for(int i = 0; i<result.size(); i++){
People people = (People)result.get(i);
System.out.println(people.getId()+" "+people.getName());
Set addresses = people.getAddresses();
for(Iterator it = addresses.iterator(); it.hasNext();){
Address address = (Address)it.next();
System.out.println(address.getId()+" "
+address.getPeopleId()+" "
+address.getAddressName());
}
}
如果加了阴影部分,则运行结果为:
Hibernate: select people0_.peopleId as peopleId0_, people0_.name as name0_ from people people0_
Hibernate: select addresses0_.peopleId as peopleId1_, addresses0_.addressId as addressId1_, addresses0_.addressId as addressId1_0_, addresses0_.peopleId as peopleId1_0_, addresses0_.addressName as addressN3_1_0_ from address addresses0_ where addresses0_.peopleId=?
Hibernate: select addresses0_.peopleId as peopleId1_, addresses0_.addressId as addressId1_, addresses0_.addressId as addressId1_0_, addresses0_.peopleId as peopleId1_0_, addresses0_.addressName as addressN3_1_0_ from address addresses0_ where addresses0_.peopleId=?
1 lucy
2 1 Hubei Wuhan
1 1 Hunan Shaoyang
2 lily
如果不加阴影部分,则运行结果为
Hibernate: select people0_.peopleId as peopleId0_, people0_.name as name0_ from people people0_
1 lucy
Hibernate: select addresses0_.peopleId as peopleId1_, addresses0_.addressId as addressId1_, addresses0_.addressId as addressId1_0_, addresses0_.peopleId as peopleId1_0_, addresses0_.addressName as addressN3_1_0_ from address addresses0_ where addresses0_.peopleId=?
1 1 Hunan Shaoyang
2 1 Hubei Wuhan
2 lily
Hibernate: select addresses0_.peopleId as peopleId1_, addresses0_.addressId as addressId1_, addresses0_.addressId as addressId1_0_, addresses0_.peopleId as peopleId1_0_, addresses0_.addressName as addressN3_1_0_ from address addresses0_ where addresses0_.peopleId=?
默认default-lazy为true,只有当程序中访问到People的Addresses时才会从数据库中加载。设置为false后,程序在加载People时立即就把它关联的Addresses全部加载进来。
另外,只有在People端设置才有效。
相关文章推荐
- hibernate:一对一外键关联映射(单向)
- 一口一口吃掉Hibernate(四)——多对一单向关联映射
- hibernate单向一对多关联映射(one-to-many)XML与注解版
- Hibernate_映射_关联关系_cascade属性、单向关联
- [JAVA] Hibernate 多对一单向关联映射
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
- hibernate学习心得一:一对一单向关联映射
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- Hibernate关联映射之-单向多对一关联(无连接表)
- Hibernate 关系映射(五) 基于主键关联的单向1:1
- Hibernate 映射关系 ---Many2Many 单向关联
- Hibernate关系映射(六)多对多单向关联@ManyToMany Annotation方式
- Hibernate从入门到精通(八)一对多单向关联映射
- Hibernate一对多单向关联和双向关联映射方法及其优缺点 (待续)
- Hibernate关系映射(5)_一对一单向联合主键关联
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- hibernate之关于一对一单向,双向关联映射
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- Hibernate几种关系映射总结(单向关联)
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射