读书人

Hibernate联系关系映射-many to one 外

发布时间: 2012-12-25 16:18:28 作者: rapoo

Hibernate关联映射-many to one 外键单向关联

多个人可以对应一个地址,也就是所谓的多对一关系,many to one, 这次还是以Person 和 Address为例 ,写一个简单的 多对一单向外键关联。

?

请看Pojo实体,

?

Person_FK_Many_to_One:

?

/** * 多对一,单向关联 * @author Administrator * */public class Person_FK_Many_to_One implements Serializable{private static final long serialVersionUID = -6313867775683964530L;private Integer id;private String name;private Integer age;private Address_FK_Many_to_One addressFKManyToOne;//getter 和 settter方法省略.}

?

Address_FK_Many_to_One:

/** *  * 多对一; * @author Administrator * */public class Address_FK_Many_to_One implements Serializable{private static final long serialVersionUID = 3635140598485086087L;private Integer addressID;private String addressDetail;//getter 和setter方法省略}

?

?

接下来配置,Hibernate.hbm.xml文件。

?

新建一个,Person_FK_Many_to_One.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="pack.java.model.Person_FK_Many_to_One" table="ZHT_PERSON_FK_MANY_TO_ONE"><id column="ID" name="id" type="java.lang.Integer"><generator column="NAME"></property><property name="age" column="AGE"></property><!-- 多对一,name为person中对应的address对象,column指定person表中的外键字段,这里的cascade,设为save-update,persist时,指定级联操作是,只能正对save和update进行级联。 --><many-to-one name="addressFKManyToOne" column="addressID" cascade="save-update,persist"></many-to-one></class></hibernate-mapping>

?

然后,在新建一个Address_FK_Many_to_One.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="pack.java.model.Address_FK_Many_to_One" table="ZHT_ADDRESS_MANY_TO_ONE"><id column="ADDRESSID" name="addressID"><generator column="ADDRESSDETAIL"></property></class></hibernate-mapping>

?

配置文件,配置完之后,在hibernate.cfg.xml中,

加入resource mapping.

<mapping resource="pack/java/model/Address_FK_Many_to_One.hbm.xml"/>
<mapping resource="pack/java/model/Person_FK_Many_to_One.hbm.xml"/>

?

最后,新建一个Test测试类,进行测试.

package pack.java.test;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import pack.java.hibernate.HibernateSessionFactory;import pack.java.model.Address_FK_Many_to_One;import pack.java.model.Person_FK_Many_to_One;/** * 测试多对一单向外键关联; * @author Administrator * */public class HibernateDemoManyToOne {public static void main(String[] args) {HibernateDemoManyToOne demoManyToOne = new HibernateDemoManyToOne();Session session = demoManyToOne.getSession();//保存;demoManyToOne.savePerson(session);//查询;demoManyToOne.queryPersonByPersonID(session);}/** * 查询出所有的person对象; * @param session */@SuppressWarnings("unchecked")private void queryPersonByPersonID(Session session){String hql = "select p from Person_FK_Many_to_One p";Query query = session.createQuery(hql);List<Person_FK_Many_to_One> list = query.list();for (Person_FK_Many_to_One personFKManyToOne : list) {System.out.println(personFKManyToOne.getId()+","+personFKManyToOne.getName()+","+personFKManyToOne.getAge()+","+personFKManyToOne.getAddressFKManyToOne().getAddressDetail());}}/** * 获取 session; * @return */private Session getSession(){Session session = HibernateSessionFactory.getSession();return session;}/** * 保存Person; */private void savePerson(Session session){Person_FK_Many_to_One personFKManyToOne1 = new Person_FK_Many_to_One();personFKManyToOne1.setAge(23);personFKManyToOne1.setName("张三");Person_FK_Many_to_One personFKManyToOne2 = new Person_FK_Many_to_One();personFKManyToOne2.setAge(43);personFKManyToOne2.setName("李四");Address_FK_Many_to_One addressFKManyToOne = new Address_FK_Many_to_One();addressFKManyToOne.setAddressDetail("广东省深圳市");//给person设置地址;personFKManyToOne1.setAddressFKManyToOne(addressFKManyToOne);personFKManyToOne2.setAddressFKManyToOne(addressFKManyToOne);session.beginTransaction().begin();//保存Person;session.save(personFKManyToOne1);session.save(personFKManyToOne2);session.beginTransaction().commit();}}

?

?测试结果:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
1,张三,23,广东省深圳市
2,李四,43,广东省深圳市

读书人网 >编程

热点推荐