[英]Java JPA/Hibernate cascade delete
我正在使用Java8
, JPA
, Hibernate 5.2.1.Final
, Spring 4.3.1.RELEASE
和MySQL
。
表:
如您所見,我有一個job
表連接到location_job
表,利用了連接表job_location
。
+---------+ +--------------+ +---------------+
| job | | job_location | | location_job |
+---------+ +--------------+ +---------------+
| ID | | JOB_ID | | ID |
| | | LOC_ID | | LAT |
| | | | | LONG |
+---------+ +--------------+ +---------------+
我正在job
表上執行刪除操作,並且還想刪除job_location
和location_job
表上的相應條目。
碼:
目前,我的代碼已成功從job
和job_location
表中刪除,但沒有從location_job
表中刪除相應的條目。
Job.java
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "job_location", joinColumns = {
@JoinColumn(name = "JOB_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
@JoinColumn(name = "LOC_ID", referencedColumnName = "ID", unique = true) })
private Set<LocationJob> locations;
JobDaoImpl.java
@Repository("jobDao")
public class JobDaoImpl extends JpaDao<Long, Job> implements JobDao {
@Override
public boolean delete(Job job) {
Set<LocationJob> locations = job.getLocations();
if (locations != null) {
for (LocationJob location : locations) {
entityManager.remove(location);
}
job.getLocations().clear();
}
entityManager.remove(job);
return true;
}
}
JpaDao.java
public class JpaDao<I, T extends AbstractDomain<I>> {
protected Class<T> entityClass;
@PersistenceContext
protected EntityManager entityManager;
@SuppressWarnings("unchecked")
protected JpaDao() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
this.entityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[1];
}
protected void remove(T entity) {
entityManager.remove(entity);
}
}
題
當我從job
表中刪除時,如何使其也從location_job
表中刪除?
謝謝。
我在這里找到了答案。
我需要添加orphanRemoval=true
:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval=true)
@JoinTable(name = "job_location", joinColumns = {
@JoinColumn(name = "JOB_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
@JoinColumn(name = "LOC_ID", referencedColumnName = "ID", unique = true) })
private Set<LocationJob> locations;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.