Moa*_*did 3 java spring hibernate
我有两个这样的实体:
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;
...
}
Run Code Online (Sandbox Code Playgroud)
公司合同:
public class CompanyContract {
...
@ManyToOne
@JoinColumn(name = "IDCLIENT")
private Client client;
...
}
Run Code Online (Sandbox Code Playgroud)
我想删除这样的 companyContract :
client.getCompanyContracts().remove(companyContract)
client = clientService.updateClient(client);
Run Code Online (Sandbox Code Playgroud)
但是删除过程没有发生
我究竟做错了什么 ?
编辑
这是我的 DAO 中的 updateClient 方法:
@Override
@Transactional
public Client updateClient(Client client) {
return entityManager.merge(client);
}
Run Code Online (Sandbox Code Playgroud)
首先,您不需要 setcascadeTypes和@Cascade。我认为这可能是您问题的根源。
你有没有override equals和hashCode在ContractCompany?因为也许您没有从中删除所需的对象List<ContactCompany>
看这个
@OneToMany(mappedBy = "client", ...)
Run Code Online (Sandbox Code Playgroud)
mappedBy通知休眠客户端是此关系的所有者,因此您需要获取client、获取 列表clientContracts、删除一个(确保它已从列表中删除)、更新客户端并删除对象。
下面的示例源代码
CompanyContract toBeRemoved = //companyContract which you want to delete
client.getCompanyContracts().remove(toBeRemoved);
toBeRemoved.client = null;
Run Code Online (Sandbox Code Playgroud)
保存两个对象,toBeRemoved以及client
| 归档时间: |
|
| 查看次数: |
11207 次 |
| 最近记录: |