您的位置:首页 > 其它

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端设置才有效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: