Hibernate JPA 关联关系:

  使用cascade做级联操作(只有在满足数据库约束时才会生效):

    CascadeType.PERSIST:

      级联保存,只有调用persist()方法,才会级联保存相应的数据

    CascadeType.REFRESH:

      级联刷新,当多个用户同时操作一个实体,为了用户取到的数据是实时的,在使用实体中的数据之前就调用一下refresh()方法

    CascadeType.MOVE:

      级联删除,当调用remove()方法删除实体时会先删除相关联的数据

    CascadeType.MERGE:

      级联更新,调用merge()方法时会更新实体中的数据

    CascadeType.ALL:

      包含以上所有级联属性

Hibernate JPA 一对一:   

  在person端配置关联,只保存person端

    //关联身份证
@OneToOne(mappedBy="person", cascade=CascadeType.ALL)
private Card card;
    //关联公民
@OneToOne
@JoinColumn(name="person_id")
private Person person;
        Person p = new Person();
p.setName("draco"); Card c = new Card();
c.setCardno("001"); p.setCard(c); session.save(p);

Hibernate JPA 一对多:

  2.1 没有关联,两端同时保存

    //一端:一对多
@OneToMany(mappedBy="customer")
private Set<Order> orders = new HashSet<Order>();
    //多端:多对一
@ManyToOne
@JoinColumn(name="custmer_id")
private Customer customer;
        Customer c = new Customer();
c.setName("draco"); Order o = new Order();
o.setProductName("apple"); c.getOrders().add(o); session.save(o);
session.save(c);

  2.2 在一端配置关联,只保存一端

    //一对多
@OneToMany(mappedBy="customer", cascade={CascadeType.PERSIST})
private Set<Order> orders = new HashSet<Order>();
        Customer c = new Customer();
c.setName("draco3"); Order o = new Order();
o.setProductName("apple3"); c.getOrders().add(o);   
    
     //session.save(c);
session.persist(c);

  

Hibernate JPA 多对多:

  3.1 没有配置关联,两端同时保存

    //关联用户
@ManyToMany(mappedBy="roles")
private Set<User> users = new HashSet<User>();
    //关联角色
@ManyToMany
@JoinTable(
name = "t_user_role1",
joinColumns=@JoinColumn(name="user_id"),
inverseJoinColumns=@JoinColumn(name="role_id")
)
private Set<Role> roles = new HashSet<Role>();
        User u = new User();
u.setName("draco"); Role r = new Role();
r.setName("VIP"); u.getRoles().add(r); session.save(u);
session.save(r);

 3.2 在user端配置关联,只保存user

 @ManyToMany(cascade={CascadeType.ALL})
        User u = new User();
u.setName("draco2"); Role r = new Role();
r.setName("VIP2"); u.getRoles().add(r); session.save(u);

Hibernate JPA 小结结(mappedBy | @JoinColumn | cascade):

  mappedBy:

      1 当关联关系的双方都不配置mappedBy属性,那么双方会互相生成外键,并且执行3条SQL(2条插入SQL,1条额外的维护外键的SQL)

     2 没有配置mappedBy属性的一方生成外键

    3 mappedBy和@JoinColumn不能配置在同一方(否则以mappedBy为准)

     4 只能有一方配置mappedBy

  cascade:

    1 在哪一方配置级联,就对哪一方进行session操作

    2 在哪一方配置级联,就应把另一方作为属性

    3 在有外键的一方配置级联,另一方作为属性填充外键

Hibernate JPA 关联关系的更多相关文章

  1. Spring Hibernate JPA 联表查询 复杂查询(转)

    今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...

  2. Spring Hibernate JPA 联表查询 复杂查询

    今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...

  3. spring data jpa hibernate jpa 三者之间的关系

    JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服 ...

  4. hibernate有关联关系删除子表时可能会报错,可以用个clear避免错误

    //清除子表数据 public SalesSet removeSalesSetDistributor(SalesSet salesSet ){ List<SalesSetDistributor& ...

  5. spring+hibernate+jpa+Druid的配置文件,spring整合Druid

    spring+hibernate+jpa+Druid的配置文件 spring+hibernate+jpa+Druid的完整配置 spring+hibernate+jpa+Druid的数据源配置 spr ...

  6. hibernate jpa 2.0 报错Hibernate cannot unwrap interface java.sql.Connection

    今天在做报表的时候,利用Hibernate JPA 2.0需要获取数据库连接com.sql.Connection的时候获取不到,网上说用这种方式解决: entityManager.getTransac ...

  7. websphere部署 hibernate jpa & Error 500: javax/persistence/OneToOne.orphanRemoval()Z

    WebSphere 7 & Javax/Persistence/OneToMany.OrphanRemoval() Error 文章出处:http://www.mkyong.com/websp ...

  8. Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

    1:Hibernate的关联关系映射的一对一外键映射: 1.1:第一首先引包,省略 1.2:第二创建实体类: 这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信 ...

  9. Spring MVC+Hibernate JPA搭建的博客系统项目中所遇到的坑

    标签: springmvc hibernate 2016年12月21日 21:48:035133人阅读 评论(0) 收藏 举报  分类: Spring/Spring MVC(6)  Hibernate ...

随机推荐

  1. 如何对 PHP 代码加密?

    这几天有同事问如何对 PHP 代码进行加密? 在我印象中 PHP 加密还是比较麻烦的,之前只知道 Zend Guard . 刚刚找了一圈发现现在还是有很多可行的方案,先记录一下,以后使用. 使用混淆 ...

  2. Tornado 模板(StaticFileHandler/static_path/template_path等) 笔记

    使用StaticFileHandler进行首页默认访问页面,最好将StaticFileHandler放在最后面,这样不会覆盖要匹配自定义的路径 import tornado.web import to ...

  3. hadoop发行版本之间的区别

    Hadoop是一个能够对大量数据进行分布式处理的软件框架. Hadoop 以一种可靠.高效.可伸缩的方式进行数据处理.Hadoop的发行版除了有Apache hadoop外cloudera,horto ...

  4. PxCook 像素大厨 标注切图,一起搞定!专注设计本质

    http://www.fancynode.com.cn/pxcook

  5. 基于tensorflow的MNIST手写识别

    这个例子,是学习tensorflow的人员通常会用到的,也是基本的学习曲线中的一环.我也是! 这个例子很简单,这里,就是简单的说下,不同的tensorflow版本,相关的接口函数,可能会有不一样哟.在 ...

  6. django get post files请求知识点

    GET: 我们在浏览器里直接键入地址回车,这种方式其实也是get方式提交了数据,如: http://localhost/login?user=123&pwd=123  就是把用户名123密码1 ...

  7. Mysql 基准测试mysqlslap,sysbench

     基准测试基本步骤 设计尽可能简单,明确测试方式哪一种,使用什么样的数据 例如:反映实际情况,用生产环境的数据的备份,可以通过日志,进行访问量的回放 如果测试性能,可以用测试工具生成数据. 执行一次和 ...

  8. 关闭AutoCAD 2019快速访问工具栏的web和moblie保存文件功能

    解决方法如下:1.先关闭CAD,再打开注册表编辑器:开始--运行--输入 regedit2.定位到 [HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R23. ...

  9. 关于java中Static关键字的加强理解

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  10. Hadoop 管理工具HUE配置-hdfs_clusters配置

    在HUE的hdfs_clusters中目前主要是配置hdfs相关的,配置好了之后便可以在hue中愉快的管理数据了,不过目前的配置还是比较...简单的..    里面的配置主要是参考了hue官方文档,还 ...