mysql Java JPA/Hibernate级联删除
我正在使用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
表执行delete,还想删除job_location
和location_job
表上的相应条目
代码:
目前,我的代码成功地从job
和job_location
表中删除,但没有从location_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
表中删除
多谢各位
# 1 楼答案
我找到了答案
我需要添加
orphanRemoval=true
: