我正在使用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
表中删除相应的条目。
工作.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;
乔布道.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;
}
}
杰帕道.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;