当前位置: 首页 > 知识库问答 >
问题:

hibernate对象引用未保存的临时实例

楚冷勋
2023-03-14

我对JPA和manytoone的关系感到困惑,我有一个类“Judiction”,它有很多“Judidget”,当我试图将一个Judidge实例存储到postgres db中时,它抛出错误消息如下:

Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.dyihi.evaluation.model.Judgement.judge -> com.dyihi.evaluation.model.User

判断类:

@Entity
@Table(name = "JUDGEMENTS")
public class Judgement implements Serializable, Cloneable {

    /**
     * 
     */
    private static final long serialVersionUID = -7049957706738879274L;

    @ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.DETACH})
    @JoinColumn(name = "user_id")
    private User judge;

还有我的服务课:

public Long store(Judgement judgement) throws RepositoryException {

        EntityManager em = null;
        EntityTransaction tx = null;
        try {
            em = _emf.createEntityManager();
            tx = em.getTransaction();
            tx.begin();
            em.persist(judgement);
            tx.commit();
            return judgement.getId();
        }
        finally {
            if (tx != null && tx.isActive()) {
                tx.rollback();
            }
            if (em != null) {
                em.close();
                em = null;
            }
        }
    }

在我的数据库中,我有判断表和用户表,我需要为多通关系创建一个作为判断用户的表吗?

共有1个答案

程承恩
2023-03-14

首先,如果如你所说,你正在寻找一个有许多法官的判决,你就有落后的东西。正如kem在他的评论中所建议的,你现在编码的方式许多判决都有一个法官,反之,一个法官可能有许多判决。

在回答您的问题时,与您试图保存的判决相关联的法官本身并未被保存。你的级联定义不允许persist级联到judge中,因此JPA别无选择,只能抛出异常。您可以更改级联定义,或手动保存判断。如果judge是持久的,但已分离,则可能需要先将其合并,以将其重新附加到实体管理器。

 类似资料: