Java JPA,三个实体,它们之间的关系¿;是否正确删除的级联类型?
我有这三个实体,它们在数据库中有自己的表。主要实体是Java JPA,三个实体,它们之间的关系¿;是否正确删除的级联类型?,java,sql,spring,hibernate,jpa,Java,Sql,Spring,Hibernate,Jpa,我有这三个实体,它们在数据库中有自己的表。主要实体是可穿戴和作业。请记住,此代码中设置的级联类型是错误的 @Entity public class Wearable { @Id private String mac; @OneToMany(mappedBy = "wearable") private List<Job> jobs; @OneToMany(mappedBy = "wearable", cascade = {CascadeType.ALL})
可穿戴
和作业
。请记住,此代码中设置的级联类型是错误的
@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;
}
}
所以在这一点上,我不知道CascadeType是如何工作的。我的意思是,如果我想删除可穿戴订阅
,而不删除可穿戴
和作业
,那么我必须在所有这些字段中设置什么类型的级联?我正在尝试所有的组合,在某些情况下,我会删除所有(WSub,W和J),而在其他情况下,当我执行删除操作时,什么都不会发生,所有(WSub,W和J)仍在数据库中。正如您在上所看到的,您有大量的值可以作为数组传递给cascade
参数
如果您只想不级联删除操作,则不要传递CascadeType.all
(因为它包括CascadeType.REMOVE
)或CascadeType.REMOVE
级联发生在包含其他实体的实体中。由于您的WearableSubscription
是一个关系实体,您可能不希望对其进行级联操作,因为更改仅与关系相关,而与实体本身无关
因此,在您的WearableSubscription
类中,您希望Job
和WearableSubscription
都没有级联设置,而其他类保持不变
希望这能有所帮助。正如您在上所看到的,您有大量的值可以作为数组传递给级联
参数
如果您只想不级联删除操作,则不要传递CascadeType.all
(因为它包括CascadeType.REMOVE
)或CascadeType.REMOVE
级联发生在包含其他实体的实体中。由于您的WearableSubscription
是一个关系实体,您可能不希望对其进行级联操作,因为更改仅与关系相关,而与实体本身无关
因此,在您的WearableSubscription
类中,您希望Job
和WearableSubscription
都没有级联设置,而其他类保持不变
希望这有帮助
@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;