【发布时间】:2017-09-22 11:06:22
【问题描述】:
我有两个这样的实体:
public class Client {
...
@OneToMany(mappedBy = "client", cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.REMOVE },orphanRemoval = true, fetch=FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private List<CompanyContract> companyContracts;
...
}
公司合同:
public class CompanyContract {
...
@ManyToOne
@JoinColumn(name = "IDCLIENT")
private Client client;
...
}
我想像这样删除公司合同:
client.getCompanyContracts().remove(companyContract)
client = clientService.updateClient(client);
但删除过程没有发生
我做错了什么?
编辑
这是我的 DAO 中的 updateClient 方法:
@Override
@Transactional
public Client updateClient(Client client) {
return entityManager.merge(client);
}
【问题讨论】:
-
你必须让双方同步,设置
CompanyContract.client为null。 -
那么我需要做的是从列表中删除 CompanyContract ,然后将 CompanyContract.client 设置为 null 然后更新 Client ?
-
是的,
orphanRemoval将负责删除CompanyContract条目 -
我认为
orphanRemoval在这种情况下与此无关。因为他想删除Client对象中的CompanyContract之一。不是来自CompanyContracts的客户和孤儿,也不是CompanyContract和孤儿Client