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. Modularizing your graphQL schemas

    转自: https://tomasalabes.me/blog/nodejs/graphql/2018/07/11/modularizing-graphql.html Modularizing you ...

  2. 关于C# winform怎么调用webapi来获取到json数据

    C/S系统也可以和B/S系统一样实现“前后端分离”,那这样写winform就相当于纯粹的前端页面了,然后再单独部署一个webapi项目,通过api调用数据库进行数据的操作,有利于维护和数据安全性的提高 ...

  3. 对HTML中的文字的修饰

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. JAVA中数组Array与List互转

    List<String> list = new ArrayList<String>();String[] array = new String[10]; 1.数组转成Listl ...

  5. Scrapy 设置请求头

    爬虫的过程有些网站设置反盗链,需要我们在请求头中添加下,修改settings.py文件中添加 DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,appl ...

  6. 文件如何转换成pdf或html格式

    1.使用jacob插件 2.使用方法 1)于word.ppt等上传文件转换为PDF格式文件的环境搭建,步骤如下:① 首先电脑要先安装office软件(不可以是WPS软件)② 需要把jacob.dll文 ...

  7. Hystrix 常用属性配置

    配置参数 默认值 说明 命令-执行属性配置 hystrix.command.default.execution.isolation.strategy THREAD 配置隔离策略,有效值 THREAD, ...

  8. nginx给server增加日志配置

    error_log /usr/local/nginx/logs/xxx.com.log debug; 放在 server { error_log /usr/local/nginx/logs/xxx.c ...

  9. 阿里巴巴Java编码规范,来测测你能得多少分

    今年年初,<阿里巴巴Java开发手册>正式发布,阿里官方Java代码规范标准首次对外公开.手册发布之后在业界.学术界都获得了广泛的关注,仅微博浏览量就突破千万,下载访问量超过40万,多家媒 ...

  10. gpio模拟I2C,驱动pcf8574T

    一.pcf8574T介绍 查看pcf8574T的数据手册, A表示读或写,当A为1的时候表示读,当A为0的时候表示写.现把地址控制线,即A2.A1.A0全部接地,可以得到读控制指令为0x41,写控制指 ...