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 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,广东省深圳市

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值