Java 对于具有共享集合引用错误的嵌套对象,Beanutils.copyProperties失败
每当遇到集合时,Java 对于具有共享集合引用错误的嵌套对象,Beanutils.copyProperties失败,java,spring,hibernate,Java,Spring,Hibernate,每当遇到集合时,BeanUtils.copyProperties就会失败 @Transactional public void createFreshAmendmentsForRestructureEvent(CcrRestructureEventMetadata restructureEventMetadata, String token, String racf) { List<Contract> contracts = getActiveContract
BeanUtils.copyProperties
就会失败
@Transactional
public void createFreshAmendmentsForRestructureEvent(CcrRestructureEventMetadata restructureEventMetadata, String token, String racf) {
List<Contract> contracts = getActiveContractsByRestructureEvent(restructureEventMetadata);
if (isEmpty(contracts)) {
log.info("No existing contract amendments found under the given restructure event [{}]...", restructureEventMetadata.getId());
} else {
// Create new Contract submission record
contracts
.forEach(c -> {
Contract newContract = new Contract();
BeanUtils.copyProperties(c, newContract);
newContract.setRestructureEvent(restructureEventMetadata.getRestructureEvent());
newContract.setCreditStatus(restructureEventMetadata.getCreditStatus());
addNewContract(newContract, new java.util.Date(), token, racf);
});
// Close existing contracts
contracts.stream()
.peek(c -> c.setEffectiveToDt(new java.util.Date()))
.forEach(contractRepository::save);
}
}
以下是带有集合参考的合同
实体部分:
...
@OneToMany( fetch=FetchType.EAGER)
@JoinColumn(name="CONTRACT_ID" )
public Set<ContractPortfolioCode> contractPortfolioCodes;
...
。。。
@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name=“合同号”)
公共集合合同;
...
有人能帮忙解决这个问题吗?嗯。。。它没有失败,它正在做它应该做的事情——将集合引用复制到新对象。但是,您应该做的是确保创建一个新的集合(并且,正如您已经了解到的,
BeanUtils.copyProperties
不是该作业的正确工具)
...
@OneToMany( fetch=FetchType.EAGER)
@JoinColumn(name="CONTRACT_ID" )
public Set<ContractPortfolioCode> contractPortfolioCodes;
...