我获得以下错误之前保存的瞬态的实例,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) at 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) at 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(来源不明)
我有2个实体类Employee.java(t_employee)和Nominee.java(t_nominee),其中一个员工可以有很多提名人数,所以我创建了一个名为的关联表ta_empl_nom(我想作为关联表本身,因为后来我可能会有选项li让其他员工与现有的被提名人)
所以在这里,当我获取雇员对象时,我想要提名对象的地图作为提名者名称和对象被提名人本身。我成功地获得了这个对象。
但保存时出现问题。当我保存员工对象时,它应该保存其提名细节。
这里是实体类 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
我在保存时获取上面的错误信息。
尝试从'Employee'删除'@ OneToMany'。见http://stackoverflow.com/questions/19428351/jpa-cascade-persistence-with-entity-elementcollection-keys – Arthur