对象引用了未保存的瞬态实例在刷新错误之前保存瞬态实例



对象引用未保存的瞬态实例-在刷新前保存瞬态实例。

我有两个类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注释。

如果没有解决,请分享完整的实体类,以便更好地理解。

最新更新