• 【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用


    项目中使用实体之间存在一对多@OneToMany,多对一@ManyToOne的映射关系,怎么设置呢?

    GitHub地址:https://github.com/AngelSXD/myagenorderdiscount可以查看完整项目

    下面给一个例子:

    类似于一个部门对应多个员工

    这里给出 一个流水账单对应多条订单折扣信息

    流水账单类:

    package com.agen.orderdiscount.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.experimental.Accessors;
    import org.hibernate.annotations.GenericGenerator;
    
    import javax.persistence.*;
    import java.util.Date;
    import java.util.List;
    
    /**
     * 流水账单
     * 请求提现以后,被记录在流水账单
     * @author SXD
     * @date 2018/1/16
     */
    @Data(staticConstructor = "of")
    @NoArgsConstructor
    @AllArgsConstructor
    @Accessors(chain = true)
    @Entity
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator" )
    public class RunningAccount {
    
        /**
         * 账单ID
         */
        @Id
        @GeneratedValue(generator = "uuid2")
        @Column(length = 36)
        private String raId;
        /**
         * 流水账单编号
         */
        @Column(nullable = false,length = 100)
        private String raSn;
        /**
         * 流水金额
         */
        @Column(nullable = false,precision = 10,scale = 2)
        private Double raAccount;
        /**
         *流水账时间
         */
        @Column(nullable = false)
        private Date raDate;
        /**
         * 流水账单 状态
         * 1    请求提现
         * 2    通过提现请求,提现成功
         * 3    拒绝提现请求,提现失败
         * 4    通过部分提现请求中的订单,拒绝部分提现请求中的订单
         *
         */
        @Column(nullable = false)
        private Integer accountStatus;
        /**
         * 操作来源
         */
        @Column(nullable = false,length = 20)
        private String raOperater;
        /**
         * 流水备注1
         */
        @Column(length = 500)
        private String ratCre1;
        /**
         * 流水备注2
         */
        @Column(length = 500)
        private String ratCre2;
    
        /**
         * 关联子集流水账单
         * 例如:本次提现 涉及到哪些订单,这些订单分别对应哪些可提现的流水
         *
         * mappBy表示关系被维护端,只有关系端有权去更新外键。
         * 这里还有注意OneToMany默认的加载方式是赖加载。当看到设置关系中最后一个单词是Many,那么该加载默认为懒加载
         */
        @OneToMany(cascade = {CascadeType.REFRESH,CascadeType.MERGE},mappedBy = "parentRa",fetch = FetchType.EAGER)
        private List<AvAmount> childAvamounts;
    
    
    
    }
    View Code

    订单折扣信息类:

    package com.agen.orderdiscount.entity;
    
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.experimental.Accessors;
    import org.hibernate.annotations.GenericGenerator;
    
    import javax.persistence.*;
    import java.util.Date;
    
    /**
     * 可提现金额
     * 报告完成,订单完结 从预估金额存入可提现金额
     * @author SXD
     * @date 2018/1/16
     */
    @Data(staticConstructor = "of")
    @NoArgsConstructor
    @AllArgsConstructor
    @Accessors(chain = true)
    @Entity
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator" )
    public class AvAmount {
    
        /**
         * 可提现ID
         */
        @javax.persistence.Id
        @GeneratedValue(generator = "uuid2")
        @Column(length = 36)
        private String Id;
        /**
         * 本次转入可提现金额
         */
        @Column(nullable = false,precision = 10,scale = 2)
        private Double avAccount;
        /**
         * 本条可提现金额记录 状态
         * 1    可提现
         * 2    请求提现,正在等待处理
         * 3    已经成功转账,提现成功
         * 4    不满足提现条件,被拒绝提现请求的
         *
         */
        @Column(nullable = false)
        private Integer amountStatus;
        /**
         * 本次转入时间
         */
        @Column(nullable = false)
        private Date avDate;
        /**
         * 订单ID
         */
        @Column(nullable = false)
        private Integer orderId;
        /**
         * 订单编号SN
         */
        @Column(nullable = false,length = 20)
        private String orderSn;
        /**
         * 机构ID
         */
        @Column(nullable = false)
        private Integer adminId;
        /**
         * 产品ID
         */
        @Column(nullable = false)
        private Integer productId;
        /**
         * 会员ID
         */
        @Column(nullable = false)
        private Integer memberId;
        /**
         * 采样包ID
         */
        @Column(nullable = false)
        private Integer cybId;
        /**
         * 操作来源
         */
        @Column(nullable = false,length = 20)
        private String avOperater;
        /**
         * 可提现金额备注1
         */
        @Column(length = 500)
        private String avCre1;
        /**
         * 可提现金额备注2
         */
        @Column(length = 500)
        private String avCre2;
    
        /**
         * 关联流水账单记录
         *
         * 这里设置JoinColum设置了外键的名字,Available是关系维护端
         */
        @ManyToOne(cascade = {CascadeType.MERGE,CascadeType.REFRESH})
        @JoinColumn(name="parentRa")
        private RunningAccount parentRa;
    
    }
    View Code
  • 相关阅读:
    Java基础101 给c:forEach的select下拉框中的值,设置默认值(后台传值,前台默认选中)
    Java进阶知识27 SSH整合(Struts2、Spring、Hibernate)
    错误/异常:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/beans_common.xml]...的解决方法
    Java进阶知识26 Spring与Hibernate整合到一起
    Java进阶知识25 Spring的事务管理(事务回滚)
    spring各个版本源码
    sql之left join、right join、inner join的区别
    git命令之git stash 暂存临时代码
    apollo配置相关
    idea快捷键
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/8296210.html
Copyright © 2020-2023  润新知