`

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 one-to-one 一对一唯一外键关联映射_单向 and 双向

    在Hibernate中,一对一唯一外键关联映射可以通过 `&lt;many-to-one&gt;` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml &lt;many-to-one name="idCard" column="card_id...

    hibernate的关联映射

    关联映射主要包括四种类型:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)。下面我们将逐一探讨这些关联映射的配置方法。 1. **一对一关联映射** - **主键关联**...

    Hibernate关联映射

    在 Hibernate 映射中,需要使用 `one-to-one` 元素,并设置 `constrained="true"`,表明该类的主键由关联类生成。 3. Hibernate 一对一连接表单向关联: 这种关联方式是通过额外的连接表来实现一对一关系的。连接...

    hibernate 全面学习->hibernate 关联映射学习

    接下来是“多对一”(Many-to-One)映射,与一对多相反,一个子实体可以关联到多个父实体。例如,多个订单可以属于同一个客户。`hibernate_many2one`的案例可能展示了如何在子类中使用`@ManyToOne`注解来指定与父类...

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    hibernate实体关联关系映射

    2. **一对多关联**(One-to-Many / Many-to-One) - 外键单向关联 - 连接表单向关联 - 外键双向关联 - 连接表双向关联 3. **多对多关联**(Many-to-Many) - 单向关联 - 双向关联 每种关联类型都有其特定的...

    Hibernate 一对多外键单向关联

    这里的`many-to-one`元素表示Address与Person的一对多关联,column属性指定了外键列的名称,class属性指定了Person实体的全限定类名,cascade属性可以指定级联操作。 在实际使用中,可以通过Hibernate的Session接口...

    Hibernate关联关系映射目录

    -- 用来映射关联PO,必须为one-to-one元素增加constrained="true"属性 --&gt; &lt;one-to-one name="address" constrained="true"/&gt; &lt;/hibernate-mapping&gt; ``` --- ##### 3. 一对一连接表单向关联 在一对一连接表单...

    hibernate关联映射

    在Person类中添加`private Address address`属性,并在`person.hbm.xml`中配置`&lt;many-to-one&gt;`元素,如`&lt;many-to-one name="address" cascade="all" class="Address" column="address_id"/&gt;`。这表示Person表中的...

    Hibernate关联映射.doc

    - 多方配置文件中添加`&lt;many-to-one&gt;`标签,表示多方与一方之间的关联。 ```xml &lt;many-to-one name="一方对象作为属性的名称" class="一方类包括了路径的" column="一方主键id" not-null="true"/&gt; ``` 3. **...

    Hibernate一对多单向关联映射

    `&lt;key&gt;`元素定义了外键列名,`&lt;one-to-many&gt;`元素指定被关联的实体类。 三、实体类定义 在Department实体类中,需要有一个类型为Set的属性,对应映射文件中的`&lt;set&gt;`元素。 ```java public class Department { //...

    hibernate的关联关系映射

    3. **第三种方式**:这是对唯一外键关联的一种变体,两个实体都包含对方的外键字段,但在配置文件中使用`&lt;many-to-one&gt;`标签,模拟一对一关联。 **二、一对多、多对一关联** 在选课系统中,一个教师可以教多个课程...

    Hibernate中的关联映射

    &lt;many-to-one name="address" class="Address" column="address_id"/&gt; ``` - **基于PK**:同样只有一方包含了另一方的引用关联实体属性,但这里通过使用外键作为主键的一部分来实现。 - **映射示例**: ```xml ...

    myeclipse试用小记----Hibernate多对一单向关联(1)

    3. **映射文件**:如果使用传统的Hibernate XML映射文件,需要在`.hbm.xml`文件中配置多对一关联,设置`&lt;many-to-one&gt;`标签。如果是注解方式,直接在Java类中使用上述提到的注解。 4. **数据访问对象(DAO)**:...

    Hibernate映射文件[文].pdf

    - 在多方的映射文件中,通过 `&lt;many-to-one&gt;` 标签定义一个引用,指定关联的列和被引用的实体类。例如,学生(Student)可以引用班级(Classes)。 3. **一对一关系**: - **外键关联**: - **单向**:在维护...

    Hibernate教程10_关系映射之多对一单向关联

    这里的`many-to-one`元素定义了多对一的关系。`name`属性指定了在员工类中对应的属性名(这里是`department`),`class`属性是部门实体的全限定类名,`column`属性是数据库表中对应的外键列名(假设为`dept_id`)。 ...

    hibernate关系映射

    在Hibernate映射文件中,通过`&lt;many-to-one&gt;`标签将User类的group属性映射到t_user表的gid外键。 - 反之,如果一个User属于一个Group(一对多),则在Group类中添加一个User的集合。映射文件中,使用`&lt;set&gt;`标签...

    hibernate-one-to-many-uni

    【标题】"hibernate-one-to-many-uni" 指的是在Hibernate框架下实现的一对多单向关联关系。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。在这个...

Global site tag (gtag.js) - Google Analytics