对象引用未保存的瞬态实例-在刷新前保存瞬态实例。
我有两个类OrganizationEntity和ApplicationEntity。组织和应用程序具有多对多的关系。
组织实体具有
@ManyToMany(cascade = { CascadeType.PERSIST })
@JoinTable(
name = "APP_ORG_REF",
joinColumns = { @JoinColumn(referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(referencedColumnName = "id") })
private Set<ApplicationEntity> applications;
ApplicationEntity具有
/**
* Many to Many Relationship ref with Application.
*/
@ManyToMany(mappedBy = "applications", cascade = CascadeType.ALL)
private Set<OrganizationEntity> organizations;
组织运营Impl.java
public OrganizationEntity createOrganizationEntity (final String org, final String app,
final String service) throws KMSCommonException
{
log.debug("Entered createOrganizationEntity");
createValidator(service, app, org, true).verify();
final ApplicationEntity applicationEntity =
applicationRepository.findByName(app, service);
if (applicationEntity == null) {
throw new KMSCommonException("Application doesn't exist.");
}
final OrgKeyRefEntity orgKeyRefEntity = OrgKeyRefEntity.builder().build();
final OrganizationEntity organizationEntity = OrganizationEntity.builder()
.name(org)
.uuid(UUID.randomUUID().toString())
.createdAt(new Timestamp(System.currentTimeMillis()))
.build();
addOrgAppRef(organizationEntity, applicationEntity);
return organizationEntity;
}
private void addOrgAppRef (final OrganizationEntity org, final ApplicationEntity
applicationEntity) {
final Set<ApplicationEntity> applicationEntities = new HashSet<>();
applicationEntities.add(applicationEntity);
org.setApplications(applicationEntities);
final Set<OrganizationEntity> organizationEntities = new HashSet<>();
organizationEntities.add(org);
applicationEntity.setOrganizations(organizationEntities);
applicationRepository.save(applicationEntity);
}
我的问题是,如果我使用applicationRepository.save(applicationEntity(保存applicationEntity,它会保存组织吗?因为我在字段中定义了CASCADETYPE.ALL。我收到这个错误。
由:org.hubinate.TransientPropertyValueException引起:对象引用了未保存的瞬态实例-在刷新之前保存瞬态实例
您正在从DB中获取application
信息。
final ApplicationEntity applicationEntity =
applicationRepository.findByName(app, service);
您正在将其用于组织。因此,我可以建议在方法createOrganizationEntity
上使用@Transactional
注释。
如果没有解决,请分享完整的实体类,以便更好地理解。