一对多    <class name="Question" table="questions" dynamic-insert="true"
        dynamic-update="true">
        <id name="id" column="id">
            <generator class="native" />
        </id>
        <property name="title" />
        <property name="content" />

        <many-to-one name="user" column="user_id" class="User" />

    </class>
    <class name="User" table="users">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />
        <property name="phone" />

        <set name="questions" table="questions" cascade="save-update"
            inverse="false"  lazy="false">
            <key column="user_id" />
            <one-to-many class="Question" />
        </set>

    </class>

user和question是一对多,在多的这一方不能设置casecade,如果设置了cascade="save-update",user删除,question因为外键关联就会报错,user也不会被删除。如果设置了cascade="delete",user删除,question也会一块删除。

不设置,user删除,question的外键user_id会置为null。如果不需要级联删除应该不加cascade。不设置的话,创建question,如果新建一个user,并为其设置了user属性,但并不会创建user

多对多

通过创建中间表users_roles 进行关联,删除其中的任何一个,中间表中包含对应id的记录都会被删掉

在user中给role设置 cascade="save-update",可以由新建user、连带着建role,但role里面没设置,就不能由新建role,来建user

<class name="User" table="users">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />

        <set name="roles" table="users_roles" lazy="false"
            cascade="save-update">  //如果配置了save-update,则删除role会出现关联错误,所以如果不是必须可以不加casecade
            <key column="user_id"></key>
            <many-to-many class="Role" column="role_id">
            </many-to-many>
        </set>
</class>
<class name="Role" table="roles" dynamic-insert="true"
        dynamic-update="true">
        <id name="id" column="id">
            <generator class="native" />
        </id>
        <property name="name" />
        <set name="users" table="users_roles" lazy="false">
            <key column="role_id"></key>
            <many-to-many class="User" column="user_id">
            </many-to-many>
        </set>
    </class>

hibernate 一对多、多对多的配置的更多相关文章

  1. Hibernate一对多关联映射的配置及其级联删除问题

    首先举一个简单的一对多双向关联的配置: 一的一端:QuestionType类 package com.exam.entity; import java.util.Set; public class Q ...

  2. Hibernate一对多(多对一)关联关系

    上一篇博文总结了 Hibernate 的一对一的关联关系, 包括基于主键的单向一对一, 基于外键的单向一对一, 基于外键的双向一对一. 下面咱们说一下 Hibernate 的一对多关联关系. 其实一对 ...

  3. Hibernate 一对多/多对多

    一对多关联(多对一): 一对多关联映射: 在多的一端添加一个外键指向一的一端,它维护的关系是一指向多 多对一关联映射: 咋多的一端加入一个外键指向一的一端,它维护的关系是多指向一 在配置文件中添加: ...

  4. hibernate一对多多对一双向

    注意事项:一对多,多对一双向关联,在一的一方的多的getSet集合上的oneToMany上加上mappedBy.告诉hibernate由多的方一来维护关系.这也符合逻辑 ,本来外键就是在加在多的一方. ...

  5. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午.......也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用 ...

  6. Hibernate一对多单向关联和双向关联映射方法及其优缺点 (待续)

    一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同.它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的同 ...

  7. hibernate一对多和多对一配置

    public class Dept { private int deptId; private String deptName; // [一对多] 部门对应的多个员工 private Set<E ...

  8. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

  9. Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

    1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...

  10. mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置

    n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...

随机推荐

  1. datagrid后台分页js

    $(function () { gridbind(); bindData(); }); //表格绑定function gridbind() { $('#dg').datagrid({ title: ' ...

  2. jquery 改变checkbox的值

    似乎没什么用... <script> $(document).ready(function(){ $("#comment").change(function(){ va ...

  3. 利用JMeter的beanshell进行接口的加密处理

    最近项目中在做http协议的接口测试,其中接口请求报文数据有个字段值需要用到加密后的签名,即出于网络传输过程中,对数据安全的考虑,要对请求的数据进行特定的处理(加密),再进行请求. 刚开始由于项目赶进 ...

  4. MySQL防止重复插入唯一限制的数据 4种方法

    MySQL防止重复插入唯一限制的数据,下面我们逐一分析 : 1.insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保 ...

  5. OpenCV 常用汇总

    cv::Rect矩形类用法 typedef struct CvRect { int x; /* 方形的左上角的x-坐标 */ int y; /* 方形的左上角的y-坐标*/ int width; /* ...

  6. 第九篇:使用 lstat 函数获取文件信息

    前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...

  7. 修改docker时区

    在实际业务场景中,经常碰到启动了一个容器,容器的时区是UTC的导致还需要重新运行: 我们在具体处理时也出现了该显现 业务场景: 数据库系统定时备份脚本, 定时备份脚本按照每天备份, 通过k8s启动容器 ...

  8. 【转】Startssl SSL 证书申请图解

    一.什么是 SSL 证书,什么是 HTTPS 网站? SSL证书是数字证书的一种,类似于驾驶证.护照和营业执照的电子副本.SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secu ...

  9. Backtracking is a form of recursion.

    w https://www.cis.upenn.edu/~matuszek/cit594-2012/Pages/backtracking.html Starting at Root, your opt ...

  10. Python开发【第六章】:面向对象

    编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...