我有这三个实体,它们在数据库中有自己的表。主要实体是Wearable
和Job
。请记住,此代码中设置的CascadeType是错误的。
@Entity
public class Wearable {
@Id
private String mac;
@OneToMany(mappedBy = "wearable")
private List<Job> jobs;
@OneToMany(mappedBy = "wearable", cascade = {CascadeType.ALL})
private List<WearableSubscription> subscriptions;
}
@Entity
public class Job {
@Id
private String id;
@OneToOne(mappedBy = "job", cascade = CascadeType.ALL)
private WearableSubscription wearableSubscription;
}
然后我想在WearableSubscription
和Wearable
之间建立关系(Job
)。可穿戴设备可以包含多个WearableSubscription
,但此WearableSubscription
中只有一个可以有一个Job
。
@Entity
public class WearableSubscription {
private WearableSubscriptionId id;
@OneToOne (cascade = {CascadeType.ALL, CascadeType.PERSIST})
@JoinColumn(name = "job_id", insertable = false, updatable = false)
private Job job;
@ManyToOne(cascade = {CascadeType.ALL, CascadeType.PERSIST})
@JoinColumn(name = "wearable_mac", insertable = false, updatable = false)
private Wearable wearable;
private String message;
private String imageUrl;
private String audioUrl;
}
所以在这一点上,我并不确切知道CascadeType是如何工作的。我的意思是,如果我要删除WearableSubscription
而不删除Wearable
和Job
,我必须在所有这些字段中设置哪种类型的级联?我正在尝试所有组合,在某些情况下我删除所有(WSub,W和J),而在其他情况下,当我执行删除时,没有任何事情发生,所有(WSub,W和J)仍然在数据库中。
答案 0 :(得分:0)
正如您在Cascade Type上看到的那样,您可以将大量值作为数组传递给cascade
参数。
如果你想要 NOT 级联是DELETE操作,请不要通过CascadeType.ALL
(因为它包括CascadeType.REMOVE
)和CascadeType.REMOVE
。
级联发生在包含其他实体的实体中。由于您的WearableSubscription
是一个关系实体,您可能不希望对其进行级联操作,因为更改仅与关系有关,而与实体本身无关。
因此,在WearableSubscription
课程中,您希望Job
和Wearable
都没有级联设置,并保留其他课程。
希望这有帮助。