Hibernate.cfg.xml:

    <session-factory name="sessionFactory">
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="cn/hbm/Person.hbm.xml"/>
<mapping resource="cn/hbm/Department.hbm.xml"/>
</session-factory>

Person:

public class Person {

	private Integer id;
private String name;
private Department dept;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department getDept() {
return dept;
}
public void setDept(Department dept) {
this.dept = dept;
} }

Department:

public class Department {

	private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }

department.hbm.xml:

<hibernate-mapping package="cn.model">
<class name="Department" table="DEPARTMENT" lazy="true">
<id name="id" column="ID">
<generator class="native"></generator>
</id>
<property name="name" column="NAME" type="java.lang.String" />
<property name="address" column="ADDRESS" type="java.lang.String" />
</class>
</hibernate-mapping>

Person.hbm.xml:

<hibernate-mapping package="cn.model">
<class name="Person" table="PERSON" lazy="true">
<id name="id" column="ID">
<generator class="native"></generator>
</id>
<property name="name" column="NAME" type="java.lang.String" />
<many-to-one name="dept" column="DEPT_ID" />
</class>
</hibernate-mapping>

使用many-to-one 将Person与Department的实体应射关联起来 DEPT_ID 是Department在Person表中的一个外键,Hibernate会根据Person实体中的dept然后找到对应的实体Department 然后再取得Department 的映射关系;

public void save(){
Session session=null;
Transaction tran=null;
try{
Department dept=new Department();
dept.setName("IT开发部");
Person person=new Person();
person.setName("汤姆");
person.setDept(dept);
session=HibernateSessionFactory.getSession();
tran=session.beginTransaction();
session.save(dept);
session.save(person);
tran.commit();
}catch(Exception e){
if(session!=null){
session.close();
}
}
} public List<Person> getByName(String name){
Session session=null;
try{
session=HibernateSessionFactory.getSession();
String hql=" from Person where name=:name";
Query query=session.createQuery(hql);
query.setString("name", name);
return query.list();
}catch(Exception e){
if(session!=null){
session.close();
}
}
return null;
}

结果,将取得Person的时候,访问Person的部门属性,会将部门信息关联查询出来:

Hibernate 、多表关联映射-多对一关系(many-to-one)的更多相关文章

  1. Hibernate 、多表关联映射 - 多对多关系映射(many-to-many)

    hibernate.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...

  2. Hibernate 多表关联映射- 一对多关系映射(one-to-many)

    Hibernage.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...

  3. 0051 MyBatis关联映射--多对多关系

    用户与订单时一对多关系,再加上商品信息的话,订单与商品之间就是多对多关系了 DROP DATABASE IF EXISTS testdb; USE testdb; /*用户表,记录用户信息:用户与订单 ...

  4. Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)

    Set类型的使用: <hibernate-mapping package="cn.model"> <class name="Department&quo ...

  5. Hibernate 多表关联

    hibernate中可以一次对多个表进行数据插入,这种插入类似 Hibernate的关联映射关系有:多对一 ---- many-to-one一对多 ---- one-to-many一对一 ---- o ...

  6. Hibernate一对一双向关联映射

    关键原因在于对象模型具有方向性: 单向:一端只能加载另一端,不能反过来. 双向:两端都可以加载另一端. 问题来了:如何我们想从身份证端(IdCard)加载人(Person),怎么办呢? 下面我们开始介 ...

  7. Hibernate之一对一关联映射

    Hibernate中一对一关联映射共分为两种,一种是一对一主键关联映射,另一种是一对一唯一外键关联映射.下面简单介绍一下这两种关联映射. 一对一主键关联映射 一对一主键关联映射的两个实体有相同的ID. ...

  8. Hibernate之1-N关联映射

    一.Hibernate之1-N关联映射 1. 哪边是 1 , 哪边是多 ?      须要从业务的角度来说明.比如,Employee 和 Department 之间就是 n-1 的关联关系,Order ...

  9. 关系/对象映射 多对多关系(@ManyToMany 注释)【重新认识】

    old: @ManyToMany 注释:表示此类是多对多关系的一边, mappedBy 属性定义了此类为双向关系的维护端, 注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Stud ...

随机推荐

  1. alsa音频驱动科普第一课

    做linux音频编程对alsa应该不陌生. 但是对于刚接触这块技术的同学来说是一件困难的事情.原因在于:网上关于alsa的资料太少了,特别国内的资料更是大部分重复.对于初学者来说特别苦恼. 由于笔者经 ...

  2. shell基础——字符串处理(转载)

    Shell的字符串处理   1 得到长度   %x="abcd"  #方法一      %expr length $x      4  # 方法二      %echo ${#x} ...

  3. linux 命令总结(转载)

    linux 命令总结(转载) 1. 永久更改ip ifconfig eth0 新ip 然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip 2.从Lin ...

  4. [Leetcode][Python]46: Permutations

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 46: Permutationshttps://leetcode.com/pr ...

  5. 升级Xcode7后所要更改的配置

    http://blog.csdn.net/huxiaoqiao163/article/details/48711077

  6. LINUX 网络编程 原始套接字

    一 原始套接字 原始套接字(SOCK_RAW)是一种不同于SOCK_STREAM.SOCK_DGRAM的套接字,它实现于系统核心.然而,原始套接字能做什么呢?首先来说,普通的套接字无法处理ICMP.I ...

  7. Flash Recovery Area 的备份

    Flash Recovery Area 的备份 备份命令是Flash recovery Area,该命令是Oracle 10g以后才有的.10g引进了flash recovery area,同时在rm ...

  8. 【最大点独立集】【poj1419】【Graph Coloring】

    题意: 最多能选取多少点,没有边相连. 解法: 取反图,求最大团 代码: #include<cstdio> #include<cstring> #include<iost ...

  9. 08JS高级 ——“继承”

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. [Linked List]Remove Linked List Elements

    Total Accepted: 43183 Total Submissions: 160460 Difficulty: Easy Remove all elements from a linked l ...