级联保存模型不保存关系

时间:2015-10-23 21:10:36

标签: postgresql playframework ebean playframework-2.4

我有一个使用与PostgreSQL数据库集成的eBean的Play2应用程序。

基本上我有一个模型TripRequest作为Passenger的列表。用例是"旅行有几个乘客"。

对于TripRequest我有这个模型:

@Entity
public class TripRequest extends Model {

    enum Status {
        OPEN,
        PROCESSING,
        CLOSED,
        CANCELLED
    }

    @Id
    private UUID id;

    @ManyToOne
    @Column(nullable = false)
    private User owner;

    @OneToMany(mappedBy = "tripRequest")
    @JoinTable(name = "trip_passengers")
    private List<Passenger> passengers;
    (... other fields, getters and setters ...)

这是我的Passenger模型:

@Entity
@Table(name = "trip_passenger")
public class Passenger extends Model {

    @ManyToOne(cascade = CascadeType.ALL)
    private TripRequest tripRequest;

    @Column(nullable = false)
    private String name;
    (... other fields, getters and setters)

因此,我创建了TripRequest的新实例,Passenger的多个实例,并将该列表设置为TripRequest实例的乘客。 问题是,当我tripRequest.save()时,主实例中的所有内容(TripRequest)都会被保存,但关系不是(所以乘客列表)。

我在文档和示例中读到,所有内容都指向CascadeType.ALL注释中的@ManyToOne,但没有&#34;运气&#34;在所有

编辑:如果您认为完整的课程有用,请告诉我,因为我可以发布它们。刚决定保持这个例子简短,所以我修剪了它们。

2 个答案:

答案 0 :(得分:1)

你的@OneToMany(mappedBy =&#34; tripRequest&#34;)...没有cascade = CascadeType.ALL(或CascadeType.PERSIST)。

这意味着TripRequest上的保存不会在乘客列表中级联。

答案 1 :(得分:0)

我认为你应该在tripRequest方设置Passenger(因为这个类实际上拥有这个关系)然后才保存它。像这样:

for(Passenger p : passengers){
    p.tripRequest = this;
}