я получаю следующее сообщение об ошибке,JPA ошибка при сохранении сущности, объект ссылается на несохраненный переходный экземпляре - сохранить переходный экземпляр перед промывкой
объекта ссылается на несохраненный переходный экземпляре - сохранить переходный экземпляр перед промывкой: Кандидаты; вложенное исключение java.lang.IllegalStateException: org.hibernate.TransientObjectException: объект ссылается на несохраненный переходный экземпляре - сохранить переходный экземпляр перед промывкой: Кандидаты объекта ссылается на несохраненный переходный экземпляре - сохранить переходный экземпляр перед промывкой
в org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible (EntityManagerFactoryUtils.java:381) на org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible (HibernateJpaDialect.java:227) на org.springframework.orm .jpa.JpaTransactionManager.doCommit (JpaTransactionManager.java:521) на org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit (AbstractPlatformTransactionManager.java:761) на org.springframework.transaction.support.AbstractPlatformTransactionManager.commit (AbstractPlatformTransactionManager.java:730) на org.springframework.transaction .interceptor.TransactionAspectSupport.commitTransactionAfterReturning (TransactionAspectSupport.java:485) на org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport.java:291) на org.springframework.transaction.interceptor.TransactionInterceptor.invoke (TransactionInterceptor .java: 96) по адресу org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) на org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke (PersistenceExceptionTranslationInterceptor.java:136) на org.springframework.aop.framework .ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) на org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor $ CrudMethodMetadataPopulatingMethodInterceptor.invoke (CrudMethodMetadataPostProcessor.java:131) в org.springframework.aop.framework.ReflectiveMethodInvocation .proceed (ReflectiveMethodInvocation.java:179) по адресу org.springframe work.aop.interceptor.ExposeInvocationInterceptor.invoke (ExposeInvocationInterceptor.java:92) на org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) на org.springframework.aop.framework.JdkDynamicAopProxy. вызывать (JdkDynamicAopProxy.java:208) на com.sun.proxy. $ Proxy180.save (Unknown Source)
у меня есть 2 объект класса Employee.java (t_employee) и Nominee.java (t_nominee), где у сотрудника может быть много номинантов, поэтому я создал таблицу ассоциаций под названием ta_empl_nom (я хотел как сама таблица ассоциаций, потому что позже у меня может быть опция li nking других сотрудников существующему кандидату)
поэтому здесь, когда я получаю объект сотрудника, я хочу, чтобы карта номинального объекта с ключом называлась как номинальное имя и объект. Мне удалось получить объект.
но проблема при сохранении.когда я сохраняю объект работника, он также должен сохранить свои номинантные детали.
Вот сущностей классы Employee.java
@Entity
@Table(name = "t_employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "name")
private String name;
@ElementCollection(fetch = FetchType.LAZY)
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "ta_emp_nom", joinColumns = @JoinColumn(name = "employee"), inverseJoinColumns = @JoinColumn(name = "nominee"))
@MapKey(name = "name")
private Map<String, Nominee> nomineeMap;
//getters and setters
}
Здесь Номинант объект класса Nominee.java
@Entity
@Table(name = "t_nominee")
public class Nominee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "name")
private String name;
// other fields, getters, and setter for them below
}
Вот мой уровень службы
Employee emp = new Employee();
emp.setName("Rahul");
Map<String,Nominee> nomineeMap = new HashMap<>();
Nominee nom1 = new Nominee();
nom1.setName("nom1");
Nominee nom2 = new Nominee();
nom1.setName("nom2");
nomineeMap.put(nom1.getName(), nom1);
nomineeMap.put(nom2.getName(), nom2);
emp.setNominee(nomineeMap);
employeeRepository.save(emp); //error here while saving this emp obj
I я получаю сообщение об ошибке при сохранении.
Попробуйте удалить '@ OneToMany' из' Employee'. См. Http://stackoverflow.com/questions/19428351/jpa-cascade-persistence-with-entity-elementcollection-keys – Arthur