【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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM