zoukankan      html  css  js  c++  java
  • 【JAVA】JPA之@OneToMany、@ManyToOne、@JoinColumn

    顾名思义,@OneToMany、@ManyToOne这两个注解就是处理一对多,多对一的关系

    这两个注解是成双成对的,有了@OneToMany,一定会配置一个@ManyToOne

    OneToMany设置

    设置OneToMany的具体方法如下:

    @Entity
    public class OrderEntity {
     
        @Id
        //...
        private String id;
     
        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "parent")
        private List<ListEntity> list = new ArrayList<ListEntity>();
     
    }

    具体说明:

      cascade 级联操作

        CascadeType. PERSIST 级联持久化 ( 保存 ) 操作
        CascadeType. MERGE 级联更新 (合并 ) 操作
        CascadeType. REFRESH 级联刷新操作,只会查询获取操作
        CascadeType. REMOVE 级联删除操作
        CascadeType. ALL 级联以上全部操作

      fetch 加载类型,默认情况一的方为立即加载,多的一方为延迟加载

        FetchType.LAZY   懒加载

        FetchType.EAGER  立即加载(缺省值)

      mappedBy  关系维护

        mappedBy= "parent" 表示在ListEntity类中的 parent 属性来维护关系,这个名称必须和ListEntity中的parent属性名称完全一致才行

        OneToMany必须写mappedBy,不然会多生成一张没用的中间表,因为如果没写mappedBy,JPA不知道具体怎样做关联    

    ManyToOne设置

    设置ManyToOne的具体方法如下:

    @Entity
    public class ListEntity {
     
        @Id
        // ...
        private String id;
     
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "order_id", insertable = false, updatable = false)
        private OrderEntity parent;
     
        @Column(name = "order_id")
        private String orderId;
     
    }

    具体说明:

      fetch=FetchType.LAZY的意思是select的时候懒加载,当加载ListEntity这个对象的时候,会加载他的属性,如id, name,但是不会去加载parent的属性。如果是EAGER,

      不仅会加载id,name等属性,而且会加载parent里面的属性。

      @JoinColumn与@Column标记一样,是用于注释表中的字段的。它的属性与@Column属性有很多相同之处,例如name属性是用来标识表中所对应的字段的名

      称,其它的不再详述。

      @JoinColumn与@Column相区别的是:@JoinColumn注释的是保存表与表之间关系的字段,它要标注在实体属性上(相当于外键)。而@Column标注的是表

      中不包含表关系的字段。

      在这里,@JoinColumn指的是ListEntity(多)表对应OrderEntity(一)表关联字段的名称。即ListEntity中的orderId对应OrderEntity中的主键Id。

  • 相关阅读:
    【读书笔记】简约至上交互设计四策略目录
    Cassandra在Windows上安装及使用方法[转]
    [转]揭秘全球最大网站Facebook背后的那些软件
    过程改进计划
    制定项目管理计划
    在sublime text3中利用markdown
    ubuntu下更改用户名和主机名
    国庆有感
    最近两天学到的技术汇总
    看见了就当没有看见
  • 原文地址:https://www.cnblogs.com/vickylinj/p/14946429.html
Copyright © 2011-2022 走看看