如何使用 spring 数据同时持久化三个实体



嗨,伙计们,我想一次持久化三个对象,这是代码:

@Entity
public class Mission implements Serializable {
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
private Long               id;
@OneToMany( mappedBy = "mission" )
@JsonManagedReference
private List<Station>      stations         = new ArrayList<>();
@OneToMany( mappedBy = "mission" )
@JsonManagedReference
private List<StationPrice> stationsPrice    = new ArrayList<>();
}
Station :
@Entity
 public class Station implements Serializable {

@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
private Long              id;
private String            station;
@ManyToOne( fetch = FetchType.LAZY, cascade = CascadeType.ALL )
@JsonBackReference
private Mission           mission;
}

车站价格 :

@Entity
public class StationPrice implements Serializable {
/**
 * 
 */

@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
private Long              Id;
private String            stationsName;
private String            stationsPrice;
@ManyToOne( fetch = FetchType.LAZY, cascade = CascadeType.ALL )
@JsonBackReference
private Mission           mission;
}

因此,当我坚持他的 我使用了以下方法:

@Override
public Mission addMision( Mission mission ) {
    List<Station> stations = mission.getStations();
    List<StationPrice> stationPrices = mission.getStationsPrice();
    mission.setStations( new ArrayList<Station>() );
    for ( Station station : stations ) {
        station.setMission( mission );
        mission.getStations().add( station );
        mission = stationRepository.save( station ).getMission();
    }
    return mission;
}
这个方法只持久化任务实体和站实体,不持久化

站价格实体,有没有办法同时持久化这三个实体?

我认为

如果添加

@OneToMany(fetch = FetchType.LAZY, targetEntity=Station.class,  cascade = CascadeType.ALL )
@JsonManagedReference
private List<Station> stations = new ArrayList<>();
@OneToMany(fetch = FetchType.LAZY,  targetEntity=StationPrice.class, cascade = CascadeType.ALL )
@JsonManagedReference
private List<StationPrice> stationsPrice = new ArrayList<>();
}

然后,您可以简单地保留任务实体,这将保留车站和车站价格。

编辑顺便说一句,你的ERM对我来说看起来很奇怪,在代码中,你循环任务站,然后添加然后回到任务中?和站价格根本不用?

最新更新