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

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

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

下面给一个例子:

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

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

 

流水账单类:

【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用
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

 

订单折扣信息类:

【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用
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

 

上一篇:GitHub(GitLab)如何配置SSH Key


下一篇:Jenkins使用入门