object references an unsaved transient instance - save the transient instance before flushing.
I have a 2 classes OrganizationEntity and ApplicationEntity. Organizations and applications has many to many relationship.
OrganizationEntity has
@ManyToMany(cascade = { CascadeType.PERSIST })
@JoinTable(
name = "APP_ORG_REF",
joinColumns = { @JoinColumn(referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(referencedColumnName = "id") })
private Set<ApplicationEntity> applications;
ApplicationEntity has
/**
* Many to Many Relationship ref with Application.
*/
@ManyToMany(mappedBy = "applications", cascade = CascadeType.ALL)
private Set<OrganizationEntity> organizations;
OrganizationOperationImpl.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);
}
My question is if i save applicationEntity using applicationRepository.save(applicationEntity) will it save organiation also as i have CASCADETYPE.ALL defined over the field. I am getting this error.
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
You are fetching the application
information from DB.
final ApplicationEntity applicationEntity =
applicationRepository.findByName(app, service);
you are using that for Organization. So I could suggest to use @Transactional
annotation on the method createOrganizationEntity
.
if not resolve please share the complete entity classes as well for better understanding.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.