(十二)Hibernate中的多表操作(1):单向多对一

  • 由“多”方可知“一”方的信息,比如多个员工使用同一栋公寓,员工可以知道公寓的信息,而公寓无法知道员工的信息。

案例一:

  • pojo类
 public class Department {    //公寓类,“一”方

        private int id;
        private String name;
          //setter和getter方法....
    }  
public class Employee {   //员工类,“多”方 ,既然是多对一,多方知道一放的信息,那么在多方中必须有一方的对象,

    private int id;
    private String name;
    private Department department;
    //setter和getter方法
}  
  • 实体映射文件

Department.hbm.xml如下:

    <?xml version="1.0"?>
        <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        <hibernate-mapping package="com.reiyen.hibernate.domain">
            <class name="Department" >
                <id name="id" >
                    <generator class="native" />
                </id>
                <property name="name" />
            </class>
        </hibernate-mapping>  

Employee.hbm.xml如下:

    <?xml version="1.0"?>
        <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        <hibernate-mapping package="com.reiyen.hibernate.domain">
            <class name="Employee">
                <id name="id">
                    <generator class="native" />
                </id>
                <property name="name" />
                <!-- name="department" name的值必须与Employee中的属性名一致. -->
                <many-to-one name="department" column="depart_id" class="Department" />
            </class>
        </hibernate-mapping>  
  • <many-to-one >元素建立了department属性和employee表的外键depart_id之间的映射.
  • <many-to-one name=”department” column=”depart_id” />这种缺省情况,
  • hibernate会默认去department对象中查找主键值,因为hibernate默认的是外键对应另一个表中的主键的,
  • 如果想对应department中的其它属性,如”name”,则可以使用<many-to-one name=”department” column=”depart_id” property-ref=”name”/>也可以使用<many-to-one name=”department” />,这与 <many-to-one name=”depart” column=”depart_id” />的唯一区别就是它的column名也为department了,而不是depart_id.
  • name: 设定待映射的持久化类的属性名,此外为employee类的department属性.

    column: 设定和持久化类的属性对应的表的外键,此外为employee表的外键depart_id.

    class(可选):设定持久化类的属性的类型,此处设定department的类型是Department类.

    not-null(可选):如果为true,表示department属性不能为null,该属性的默认值为false.当为true时,生成的employee表中depart_id外键会设置not-null约束,所以当Hibernate保存Employee对象时,会先检查它的department属性是否为null,如果为null,则会抛出异常.

时间: 2024-11-08 21:01:37

(十二)Hibernate中的多表操作(1):单向多对一的相关文章

(十三)Hibernate中的多表操作(3):单向多对多

多对多的处理方式是,有一张中间表,中间表保存两个多方之间的关系.首先来看实际应用场景:在之前开发的系统中,应用了基于角色的控制访问,也就是RBAC模型,一个用户可能存在多种角色,一种角色也可能有多个用户,所以用户和角色之间是一个多对多的关系. 案例一:  使用注解方式实现多对多关系 RoleBean.java package bean; import java.io.Serializable; import java.util.HashSet; import java.util.Set; imp

(十四)Hibernate中的多表操作(4):单向一对一

案例一: 注解方式实现一对一 UserBean.java package bean; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import java

(十一)Hibernate中的多表操作(1):单向一对多

一.单向一对多() 案例一(用XML文件配置): 一个会员(Member)可以有多个订单(Order),加载会员的时候自动加载订单,但是订单无法查看会员信息, public class Member { private String id; private String name; private Integer age; private Set<Order> orders = new HashSet<Order>(); //该Set集合里存放的是"多"方,加载

Spring整合Hibernate中自动建表

Spring整合Hibernate中自动建表 博客分类: JavaEE Java代码   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> <

SpringMVC学习(十二)——SpringMVC中的拦截器

SpringMVC学习(十二)--SpringMVC中的拦截器 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下SpringMVC中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法. SpringMVC中拦截器的定义和配置 SpringMVC中拦截器的定义 在SpringMVC中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法,如下: public class Inter

Docker学习(十二)中遇到的一些问题汇总

Docker学习(十二)中遇到的一些问题汇总 标签(空格分隔): docker docker: Error response from daemon: Conflict. The container name "/myubuntu" is already in use docker container ls docker container rm 容器名 docker rm $(docker ps -a -q) 删除所有容器 centos无法上网 ifup ens33 // 启用网卡

十二生旺死绝表配纳音五行

十二生旺死绝表配纳音五行 十二生旺死绝表纳音五行十二运程,是以纳音五行作为我自身来从事十二运各运所主的吉凶.这种方法,过去是江湖上秘而不传的绝窍,应用时以日主坐下十二运来分析一个人的性格,准确度很高,应用时以年柱.日柱为主,如能配合格局一起分析,则更为准确.以下是十二生旺死绝表配纳音五行的断法: 1.十二生旺死绝自坐长生    甲申.丙寅.己亥.辛已.戊申,在这几个干支日出生的人,做事通情达理,德高望重,且人格高尚,处事敏捷,性格开朗,富有进取心,如格局不受冲破.主步步高升,乃健康而且长寿之命.

Annotation(二)——Hibernate中注解的开发

在利用注解开发数据库持久层以前,需要学习一个规范JPA(Java Persistence API),这也是SUN公司提出的数据库的持久化规范.就类似于JDBC,Servlet,JSP等规范一样.而Hibernate框架就实现了此规范,我们可以通过注解和配置文件来实现此规范.前边的学习都是建立在配置文件的基础上,而注解开发现在也处于一种趋势,毕竟它大大提高了开发速度. 看一下注解在Hibernate框架中的开发知识. 一,首先需要导入支持注解开发的jar包: hibernate-annotatio

【读书笔记】C#高级编程 第二十四章 文件和注册表操作

(一)文件和注册表 对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理. (二)管理文件系统 System.MarshalByRefObject--这是.NET类中用于远程操作的基对象类,它允许在应用程序域之间编组数据. FileSystemInfo--这是表示任何文件系统对象的基类. FileInfo和File--这些类表示文件系统上的文件. DirectoryInfo和Directory--这些类表示文件系统上的文件夹.