`

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

分享到:
评论

相关推荐

    Hibernate学习笔记

    020 &lt;one-to-one&gt;、&lt;many-to-one&gt;单端关联上的 lazy(懒加载)属性 021 继承关联映射 022 component(组件)关联映射 023 复合主键 关联映射 024 其它 关联映射 025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形...

    hibernate学习笔记

    hibernate多对一关联映射(Hibernate_Many2One) 7 hibernate一对一主键关联映射(单向关联Person----&gt;IdCard) 8 hibernate一对一主键关联映射(双向关联Person&lt;----&gt;IdCard) 9 hibernate一对一唯一外键关联映射...

    Hibernate_Annotation关联映射

    多对一(Many-to-One) 使用@ManyToOne批注来实现多对一关联。 @ManyToOne批注有一个名为targetEntity的参数,该参数定义了目标实体名,通常不需要定义该参数,因为在大部分情况下默认值(表示关联关系的属性类型)就...

    HibernateAPI中文版.chm

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-...

    hibernate3.2中文文档(chm格式)

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-...

    Hibernate+中文文档

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-...

    Hibernate中文详细学习文档

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-...

    Hibernate3的帮助文档

    6.1.10. 多对一(many-to-one) 6.1.11. 一对一 6.1.12. 组件(component), 动态组件(dynamic-component) 6.1.13. properties 6.1.14. 子类(subclass) 6.1.15. 连接的子类(joined-subclass) 6.1.16. 联合子类...

    Hibernate 中文 html 帮助文档

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-...

    hibernate 体系结构与配置 参考文档(html)

    多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-subclass...

    Hibernate教程

    6.1.10. 多对一(many-to-one) 6.1.11. 一对一 6.1.12. 组件(component), 动态组件(dynamic-component) 6.1.13. properties 6.1.14. 子类(subclass) 6.1.15. 连接的子类(joined-subclass) 6.1.16. 联合子类...

    最全Hibernate 参考文档

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 组件(component), 动态组件(dynamic-component) 5.1.13. properties 5.1.14. 子类(subclass) 5.1.15. 连接的子类(joined-subclass) 5.1.16. 联合子类(union-...

    hibernate 框架详解

    多对一(many-to-one) 6.1.11. 一对一 6.1.12. 组件(component), 动态组件(dynamic-component) 6.1.13. properties 6.1.14. 子类(subclass) 6.1.15. 连接的子类(joined-subclass) 6.1.16. 联合子类(union-...

    hibernate3.04中文文档.chm

    6.1.10. 多对一(many-to-one) 6.1.11. 一对一 6.1.12. 组件(component), 动态组件(dynamic-component) 6.1.13. properties 6.1.14. 子类(subclass) 6.1.15. 连接的子类(joined-subclass) 6.1.16. 联合子类...

    Hibernate3+中文参考文档

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 组件(component), 动态组件(dynamic-component) 5.1.13. properties 5.1.14. 子类(subclass) 5.1.15. 连接的子类(joined-subclass) 5.1.16. 联合子类(union-...

    Hibernate参考文档

    5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) 5.1.13. 组件(component), 动态组件(dynamic-component) 5.1.14. properties 5.1.15. 子类(subclass) 5.1.16. 连接的子类(joined-...

    JSP开发之hibernate之单向多对一关联的实例

    JSP开发之hibernate之单向多对一关联的实例 一对多的基础上来测试单向多对一的关联 hibernate多对一的关联关系定义: 和单向一对多不同的是:一对多是在意的一方的一方定义set集合,在映射文件中 &lt;one xss=...

    jdbc基础和参考

    many-to-one:标签中对于cascade的取值delete,delete-orphan,all-delete-orphan(只用unique属性值不为true不能出现)慎用 cascade:级联属性 none:不做任何级联操作 save-update:对当前对象执行save,update, ...

    hibernate_reference中文文档.pdf

    1.2.2. 单向 Set-based 的关联 ......................................... 14 1.2.3. 使关联工作 ..................................................... 15 1.2.4. 值类型的集合 ..................................

Global site tag (gtag.js) - Google Analytics