我有一个使用与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;在所有
编辑:如果您认为完整的课程有用,请告诉我,因为我可以发布它们。刚决定保持这个例子简短,所以我修剪了它们。
答案 0 :(得分:1)
你的@OneToMany(mappedBy =&#34; tripRequest&#34;)...没有cascade = CascadeType.ALL(或CascadeType.PERSIST)。
这意味着TripRequest上的保存不会在乘客列表中级联。
答案 1 :(得分:0)
我认为你应该在tripRequest
方设置Passenger
(因为这个类实际上拥有这个关系)然后才保存它。像这样:
for(Passenger p : passengers){
p.tripRequest = this;
}