Hibernate 单向多对一、单向一对多、双向一对多关联关系详解

一对多关系是最普遍的映射关系。比如部门和职工
一对多:从部门的角度,一个部门对应多个职工
多对一:从职工的角度,多个职工对应一个部门

数据库表中结构:
表 department:did departname
表 Employee:eid   ename   esex   did


工具类:SessionFactoryUtils .java,用来创建session工厂,后面的测试类的代码中会调用这个工具类的方法

public class SessionFactoryUtils {
    private SessionFactory factory;
    private static SessionFactoryUtils factoryUtils;

    // 单例模式:把构造方法设置为私有的,说明不可以new这个类的实例。
    private SessionFactoryUtils() {
    }

    // 通过定义这个类的静态方法,并且返回类型与这个类的类型一样,来实现对这个类的访问
    public static SessionFactoryUtils getInstance() {
        if (factoryUtils == null) {
            factoryUtils = new SessionFactoryUtils();
        }
        return factoryUtils;
    }

    public SessionFactory openSessionFactory() {
        if (factory == null) {
            //加载主配置文件
            Configuration configuration = new Configuration().configure();

            //建立工厂
            factory = configuration.buildSessionFactory();
        }
        return factory;
    }
}

单向多对一:

首先两个实体类,一个部门类,一个职工类:

public class Department {
    private Integer did;
    private String departname;
    //get和set方法,这里就不贴出来了,自己引入即可
}
public class Employee {
    private Integer eid;
    private String ename;
    private String esex;
    private Department department;
}



Employee类的映射文件:Employee.hbm.xml:多的一方,需要维护双方关系,所以里面配置有一的一方的引用。

<hibernate-mapping>
    <class name="org.danni.model.entity.Employee">
        <!-- 设置主键 -->
        <id name="eid" column="eid">
            <!-- 设置为native之后,主键会按照本来的顺序进行增长(比如之前23但是删除了,现在就从24开始) -->
            <generator class="native"></generator>
        </id>

        <!-- 设置属性 -->
        <property name="ename" column="ename"></property>
        <property name="esex" column="esex"></property>

        <many-to-one name="department"  cascade="all" column="did" 
            class="org.danni.model.entity.Department"></many-to-one>
    </class>
</hibernate-mapping>

many-to-one的常用属性:
name:映射类属性的名称(必须)
class:关联类的完全限定名
column:关联的字段
not-null:设置关联的字段的值是否可以为空。默认值false
lazy:指定关联对象是否使用延迟加载以及延迟加载的策略。lazy属性有三个取值:false、proxy、no-proxy。默认值proxy
fetch:设置抓取数据的策略。默认值是select
many-to-one没有inverse属

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值