级联保存模型不保存关系

Mig*_*iro 7 postgresql playframework ebean playframework-2.4

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

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

对于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 ...)
Run Code Online (Sandbox Code Playgroud)

这是我的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)
Run Code Online (Sandbox Code Playgroud)

因此,我创建了一个新实例TripRequest,Passenger并将该列表设置为TripRequest实例的乘客.问题是,当我tripRequest.save()在主实例中执行所有操作时(TripRequest)得到保存但关系不是(所以乘客列表).

我的文档和例子阅读,一切都指向我到CascadeType.ALL@ManyToOne注释,但没有"运气"的说法

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

cos*_*lev 0

我认为你应该站在tripRequest一边Passenger(因为这个类实际上拥有这种关系),然后才保存它。像这样的东西:

for(Passenger p : passengers){
    p.tripRequest = this;
}
Run Code Online (Sandbox Code Playgroud)

  • 嗯...发现问题了。我什至不需要将 tripRequest 实例设置为 Passenger。因此,首先,级联必须转到“@OneToMany”。问题是“Passenger”没有 ID 成员。我必须调试 Play 的代码才能查看 NPE 的来源。 (2认同)