Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.hibernate.TransientPropertyValueException:对象引用未保存的临时实例-在刷新之前保存临时实例_Java_Json_Hibernate_Rest_Jax Rs - Fatal编程技术网

Java org.hibernate.TransientPropertyValueException:对象引用未保存的临时实例-在刷新之前保存临时实例

Java org.hibernate.TransientPropertyValueException:对象引用未保存的临时实例-在刷新之前保存临时实例,java,json,hibernate,rest,jax-rs,Java,Json,Hibernate,Rest,Jax Rs,我有两个实体,它们之间只有一个关系。 第一个: @Entity public class B{ @OneToOne(targetEntity = A.class, cascade = CascadeType.ALL) @JoinColumn(name = "aId", columnDefinition = "VARCHAR(50)", referencedColumnName = "aId", insertable = true, updatable = true

我有两个实体,它们之间只有一个关系。 第一个:

    @Entity
    public class B{
    @OneToOne(targetEntity = A.class, cascade = CascadeType.ALL)
    @JoinColumn(name = "aId", columnDefinition = "VARCHAR(50)", referencedColumnName = "aId", insertable = true, updatable = true, nullable = false)
    private A a;

    .....
}
另一个:

   @Entity
    public class A{
    @OneToOne(mappedBy = "a", targetEntity = B.class, fetch = FetchType.LAZY)
    private B b;  
}
我尝试使用JAX-RS读取json文件,并得到异常:

{
    "a": {
        "name": "my name"
        "b": {
            "attribut": "my attribut...."
        }
}
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : B.a -> A
    at org.hibernate.engine.spi.CascadingActions$8.noCascade(CascadingActions.java:398)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:129)
    at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:167)
    at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:158)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:91)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
    ... 52 more
我需要我的控制器

@SuppressWarnings({ "resource" })
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/send")
    public Response post(MyRoot myRoot) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(D.class);
        AutowireCapableBeanFactory acbFactory = applicationContext
                .getAutowireCapableBeanFactory();
        acbFactory.autowireBean(this);

        a = myRoot.getA();
        em.persist(a);
        b = a.getB();
        em.persist(b);
        return Response.status(200).entity(myRoot).build();
    }
MyRoot返回一个A实体。 我得到一个例外:

{
    "a": {
        "name": "my name"
        "b": {
            "attribut": "my attribut...."
        }
}
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : B.a -> A
    at org.hibernate.engine.spi.CascadingActions$8.noCascade(CascadingActions.java:398)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:129)
    at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:167)
    at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:158)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:91)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
    at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
    ... 52 more

有什么想法吗?

可能重复为什么在刷新之前保存临时实例?你能解释一下吗?