多个人可以对应一个地址,也就是所谓的多对一关系,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 class="identity"></generator>
</id>
<property name="name" 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 class="identity"></generator>
</id>
<property name="addressDetail" 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,广东省深圳市