关于jpa、hibernate的级联关系及注解OneToOne等注解解释


前言:都在说Jpa是一种规范,而Hibernate是它的一种实现。刚开始接触jpa,hibernate的注解了解的并不多一直以为是两个不同的框架,以为是两套不同的注解,其实并不是。一些重要的注解如Column, OneToMany等,hibernate没有提供,是调用jpa中package javax.persistence;包下的接口,这说明jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两套注解,所以我们要使用hibernate注解就必定要使用jpa。
先来看几个实例


  1、@OneToOne(mappedBy = "applyOrder", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
    public ReturnsRecord getReturnsRecord() {
        return returnsRecord;
    }


   2、@OneToOne(mappedBy = "orderxx", fetch = FetchType.LAZY)
    @JoinColumn(nullable = true, updatable = true)
    public WxOrder getWxOrder() {
        return wxOrder;
    }


   3、@NotEmpty
    @OneToMany(mappedBy = "order", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    public List<OrderItem> getOrderItems() {
        return orderItems;
    }


   4、@ManyToOne(fetch = FetchType.LAZY)
    public Cashier getCashier() {
        return cashier;
    }


常用关系:
1、OneToOne:一对一关联(即一对一关系)
2、OneToMany:一对多关联(即一对多关系)
3、ManyToOne:多对一关联(即多对一关系)
4、ManyToMany:多对多关联(即多对多关系)


mappedBy: 
1、只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性。 
2、mappedBy标签一定是定义在被拥有方的,他指向拥有方(如例2中mappedBy="applyOrder",也就是在当前类中指向ReturnsRecord类中的applyOrder属性)
3、mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的。
4、mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。 


其他属性:


1、fetch的默认值:FetchType.EAGER 这将要求持续性提供程序运行时必须迫切获取数据。FetchType.LAZY相反,懒加载


2、cascade:级联,它可以有有五个值可选,分别是:
   CascadeType.PERSIST:级联新建
   CascadeType.REMOVE : 级联删除
   CascadeType.REFRESH:级联刷新
   CascadeType.MERGE  : 级联更新
   CascadeType.ALL    : 以上全部四项


3、@JoinColumn:主表外键字段

4、@NotEmpty 不能为空




--------------------------------------------------------分割线-----------------------------------------------------

毒鸡汤:只有不断学习的人、始终保持高成长率,才有可能不依靠运气、出身那些偶然条件,通往财富自由。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值