项目中使用实体之间存在一对多@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; }
订单折扣信息类:
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; }