平常我们工作中基本最多两级嵌套,但是有时候难免会遇到三级嵌套的业务场景,笔者最近就碰到了,使用一般的嵌套发现赋值为空,这可难倒了菜逼的我,后来在stackoverflow的帮助下终于搜到了解决办法,完美解决了问题 ,总结一下,方便有需要的同学,下面直接上栗子:
首先上实体类:三级嵌套如下 (电站 —–> 电桩 —->电枪)
电站实体类 (实体为JPA写法,不影响mybatis的使用)
package com.weima.cecapp.entities; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.util.Collections; import java.util.List; import java.util.Set; @NoArgsConstructor @Data @Entity @Table(name = "station_info") public class StationInfo { /** * Auto-generated primary key. */ @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(unique = true, nullable = false, updatable = false) private String id; @Column(name = "station_id") private String stationId; @Column(name = "operator_id") private String operatorId; @Column(name = "equipment_owner_id") private String equipmentOwnerId; @Column private String stationName; @Column private String countryCode; @Column private String areaCode; @Column private String address; @Column private String stationTel; @Column private String serviceTel; @Column private Integer stationType; @Column private Integer stationStatus; @Column private Integer parkNums; @Column private Double stationLng; @Column private Double stationLat; @Column private String siteGuide; @Column private Integer construction; @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, orphanRemoval = true, mappedBy = "ownerStationInfo") private List<StationPicture> pictures; @Column private String matchCars; @Column private String parkInfo; @Column private String busineHours; @Column(name = "busine_hours_in_milliseconds") private Long busineHoursInMilliseconds; @Column private String electricityFee; @Column private String serviceFee; @Column private String parkFee; @Column private String payment; @Column private Integer supportOrder; @Column private String remark; @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}, orphanRemoval = true, mappedBy = "ownerStationInfo") @BatchSize(size = 20) private List<EquipmentInfo> equipmentInfos; }
电站图片实体
package com.weima.cecapp.entities; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; @Data @Entity @EqualsAndHashCode(of = {"url"}) @ToString(exclude = {"ownerStationInfo"}) @Table(name = "station_picture") public class StationPicture { /** * Auto-generated primary key. */ @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(unique = true, nullable = false, insertable = true, updatable = false) private String id; @ManyToOne(fetch = FetchType.EAGER, optional = false) @JoinColumn(nullable = false, updatable = false) private StationInfo ownerStationInfo; @Column private String url; }
电桩实体类
package com.weima.cecapp.entities; import lombok.Data; import lombok.EqualsAndHashC<strong>本文来源gaodai#ma#com搞@@代~&码网</strong>ode; import lombok.ToString; import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.List; @Data @Entity @EqualsAndHashCode(of = {"equipmentId"}) @ToString(exclude = {"ownerStationInfo"}) @Table(name = "equipment_info") public class EquipmentInfo { /** * Auto-generated primary key. */ @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator") @Column(unique = true, nullable = false, updatable = false) private String id; @Column(name = "equipment_id") private String equipmentId; @ManyToOne(fetch = FetchType.EAGER, optional = false) @JoinColumn(nullable = false, updatable = false) private StationInfo ownerStationInfo; @Column(name = "manufacturer_id") private String manufacturerId; @Column private String manufacturerName; @Column private String equipmentModel; @Column private String productionDate; public String getProductionDate() { String format = null; if (this.productionDate != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { format = sdf.format(sdf.parse(this.productionDate)); } catch (ParseException e) { e.printStackTrace(); } return format; } return format; } @Column private String equipmentType; @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "ownerEquipmentInfo", cascade = {CascadeType.PERSIST}) @BatchSize(size = 20) private List<ConnectorInfo> connectorInfos; @Column private Double equipmentLng; @Column private Double equipmentLat; @Column private Double power; @Column private String equipmentName; @Column(name = "equipment_no") //cpo's custom equipmentId mostly for Evstation private String equipmentNo; }