【发布时间】:2018-08-09 03:09:26
【问题描述】:
我正在尝试使用 Spring Data JPA 从 多对多 关系中删除条目。其中一个模型是关系的所有者,我需要删除非所有者实体的条目。这些是模型:
工作流实体
@Entity(name = "workflows")
public class Workflow {
@Id
@Column(name = "workflow_id", updatable = false, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID workflowId;
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "workflow_data",
joinColumns = @JoinColumn(name = "workflow_id", referencedColumnName = "workflow_id"),
inverseJoinColumns = @JoinColumn(name = "data_upload_id", referencedColumnName = "data_upload_id"))
private Set<DataUpload> dataUploads = new HashSet<>();
// Setters and getters...
}
数据上传实体
@Entity(name = "data_uploads")
public class DataUpload {
@Id
@Column(name = "data_upload_id")
private UUID dataUploadId;
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "dataUploads")
private Set<Workflow> workflows = new HashSet<>();
// Setters and getters...
}
数据上传库
@Repository
public interface DataUploadsRepository extends JpaRepository<DataUpload, UUID> {
@Transactional
void delete(DataUpload dataUpload);
Optional<DataUpload> findByDataUploadId(UUID dataUploadId);
}
为了删除数据上传,我正在尝试执行存储库的几个查询方法:
第一版
dataUploadsRepository.deleteAll(workflow.getDataUploads());
第二版
workflow.getDataUploads().stream()
.map(DataUpload::getDataUploadId)
.map(dataUploadsRepository::findByDataUploadId)
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(dataUploadsRepository::delete);
问题是 Spring Data JPA 没有删除 DataUploads 也没有删除关联表 workflow_data 的条目。
如何告诉 Spring Data 从data_uploads 和workflow_data(关联表)中删除?
我将不胜感激。
【问题讨论】:
标签: java spring spring-data-jpa many-to-many