java - JPA一起保存主键和外键

标签 java hibernate jpa

我有两个实体 DealEntityDealTypeEntity 他们是相关的——

@Entity
class DealEntity{
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "DEAL_TYPE_ID")
  private DealTypeEntity dealTypeEntity;
}

我试图通过创建包含 DealTypeEntity ref 的 DealEntity 实例来保存。

我正在使用 JPA,它在 entityManager.persist(entity) 中给了我异常

     Oct 17, 2013 3:36:34 PM org.apache.catalina.core.StandardWrapperValve invoke
     SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path             [/Travel-Portal] threw exception [Request processing failed; nested exception is          org.springframework.dao.InvalidDataAccessApiUsageException:org.hibernate.TransientPropertyV alueException: object references an unsaved transient instance - save the transient  instance before flushing: training.impetus.tp.model.DealEntity.dealTypeEntity ->  training.impetus.tp.model.DealTypeEntity; nested exception is  java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object  references an unsaved transient instance - save the transient instance before flushing:  training.impetus.tp.model.DealEntity.dealTypeEntity ->  training.impetus.tp.model.DealTypeEntity] with root cause
 org.hibernate.TransientPropertyValueException: object references an unsaved transient i nstance - save the transient instance before flushing:  training.impetus.tp.model.DealEntity.dealTypeEntity ->  training.impetus.tp.model.DealTypeEntity
    at org.hibernate.engine.spi.CascadingAction$8.noCascade(CascadingAction.java:380)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:176)
    at o rg.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEv entListener.java:160)
    at o  rg.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlus hingEventListener.java:151)
    at o    rg.hiborg.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:151)
    at org.hib

最佳答案

要么按照错误消息建议的“在刷新之前保存 transient 实例”进行操作

entityManager.persist(dealTypeEntity);
entityManager.persist(dealEntity);

或者您可以将 DealEntity 中的注释更改为

@ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.PERSIST)
// then persisting DealEntity would persist the childs also
entityManager.persist(dealEntity);

关于java - JPA一起保存主键和外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19424179/

相关文章:

java - 没有单独的连接表的 Hibernate @OneToMany

java - 什么将参数传递给类似 ...(myClass.FINALOBJECT) 的方法?

java - 如何在 Java 中验证文本文件内容?

java - hibernate 模式 : how to get the current audited table name?

hibernate - Grails 忽略 hibernate.cfg.xml

mysql - Spring Boot+Hibernate向mysql插入空值

java - 删除父项和所有子项

java - JPA:按集合值属性排序查询结果?

java - 在 Java 中表示 Excel 工作表值的好方法

Java 程序在 Microsoft Server 上每个用户一个进程