Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
Hibernate 对象引用未保存的临时实例-在刷新之前保存临时实例,同时尝试在@ManyToOne关系上设置null_Hibernate_Jpa_Null_Playframework 2.2_Detach - Fatal编程技术网

Hibernate 对象引用未保存的临时实例-在刷新之前保存临时实例,同时尝试在@ManyToOne关系上设置null

Hibernate 对象引用未保存的临时实例-在刷新之前保存临时实例,同时尝试在@ManyToOne关系上设置null,hibernate,jpa,null,playframework-2.2,detach,Hibernate,Jpa,Null,Playframework 2.2,Detach,我试图在db中持久化实体,如下图所示。它被简化为指出出现的问题: @Entity public class Entity { public @Id int id; public String description @ManyToOne(cascade=CascadeType.MERGE, optional=true, fetch=FetchType.LAZY) public User user; persistToDB() { //id generated by db;

我试图在db中持久化实体,如下图所示。它被简化为指出出现的问题:

@Entity
public class Entity {
public @Id int id;
public String description
@ManyToOne(cascade=CascadeType.MERGE, optional=true, fetch=FetchType.LAZY)
public User user;

  persistToDB() {
    //id generated by db;
    this.description= "test description";
    this.user = null;
    JPA.em().persist(this);
  } 

}
它应该有用,但当我尝试时它失败了。我得到一个错误:

object references an unsaved transient instance - save the transient instance before flushing
以下是整个堆栈跟踪:

play.api.Application$$anon$1: Execution exception[[RollbackException: Error while committing the transaction]]
        at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10-2.2.4.jar:2.2.4]
        at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10-2.2.4.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10-2.2.4.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10-2.2.4.jar:2.2.4]
        at scala.Option.map(Option.scala:145) [scala-library.jar:na]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:264) [play_2.10-2.2.4.jar:2.2.4]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:260) [play_2.10-2.2.4.jar:2.2.4]
        at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) [scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) [scala-library.jar:na]
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library.jar:na]
        at play.api.libs.iteratee.Execution$$anon$1.execute(Execution.scala:43) [play-iteratees_2.10-2.2.4.jar:2.2.4]
        at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40) [scala-library.jar:na]
        at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248) [scala-library.jar:na]
        at scala.concurrent.Promise$class.complete(Promise.scala:55) [scala-library.jar:na]
        at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:153) [scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) [scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) [scala-library.jar:na]
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1361) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library.jar:na]
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library.jar:na]
Caused by: javax.persistence.RollbackException: Error while committing the transaction
        at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:92) ~[hibernate-entitymanager-4.2.0.CR1.jar:4.2.0.CR1]
        at play.db.jpa.JPA$2.apply(JPA.java:190) ~[play-java-jpa_2.10-2.2.4.jar:2.2.4]
        at play.core.j.FPromiseHelper$$anonfun$map$1.apply(FPromiseHelper.scala:79) ~[play_2.10-2.2.4.jar:2.2.4]
        at scala.util.Success$$anonfun$map$1.apply(Try.scala:206) ~[scala-library.jar:na]
        at scala.util.Try$.apply(Try.scala:161) ~[scala-library.jar:na]
        at scala.util.Success.map(Try.scala:206) ~[scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) [scala-library.jar:na]
        at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235) [scala-library.jar:na]
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library.jar:na]
        at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:37) ~[play_2.10-2.2.4.jar:2.2.4]
        at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
        at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
        ... 4 common frames omitted
Caused by: java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: models.InconsistencyRegistry.personResponsibleForRemoval -> models.User
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1384) ~[hibernate-entitymanager-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310) ~[hibernate-entitymanager-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:80) ~[hibernate-entitymanager-4.2.0.CR1.jar:4.2.0.CR1]
        ... 15 common frames omitted
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: models.InconsistencyRegistry.personResponsibleForRemoval -> models.User
        at org.hibernate.engine.spi.CascadingAction$8.noCascade(CascadingAction.java:380) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:176) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:161) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:152) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1212) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:400) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
        at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:75) ~[hibernate-entitymanager-4.2.0.CR1.jar:4.2.0.CR1]
        ... 15 common frames omitted
若我将用数据库中已经存在的数据填充用户对象,那个么每个人都认为这很有用,但有时我需要将live user留空并将null插入数据库

顺便说一下,我使用PlayFramework2.2.4和JPA/hibernate来实现这一点

有人能帮我吗

-编辑-

全班:

主要实体:

@Entity
public class InconsistencyRegistry extends Generic<InconsistencyRegistry> {
    @Required
    @DateTime(pattern = "YYYY-MM-DD")
    public String ascertainDate;

    @Required
    @ManyToOne(cascade = CascadeType.MERGE)
    public InconsistencyOrigin origin;

    /** The customer. */
    @ManyToOne(cascade = CascadeType.MERGE)
    @Required
    public Customer customer;


    @Required
    public String description;

    @Required
    public boolean removal;
    public String removalWay;

    @ManyToOne(cascade = CascadeType.MERGE, optional=true,fetch = FetchType.LAZY)
    public User personResponsibleForRemoval;

    @DateTime(pattern = "YYYY-MM-DD")
    public String removalDeadline;
    @DateTime(pattern = "YYYY-MM-DD")
    public String removalDate;

    public void toDataBase() {
        JPA.em().persist(this);
    }
}
和用户实体:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

    @Constraints.Required
    public String email;

    public String password;

    @ManyToOne(cascade = CascadeType.PERSIST)
    @Constraints.Required
    public Customer customer;

    @ManyToOne(cascade=CascadeType.MERGE)
    public Department department;

    @ManyToMany(cascade = CascadeType.PERSIST)
    public List<Role> role;

    @Constraints.Required
    public boolean system;

    @Constraints.Required
    public boolean active;

    @Constraints.Required
    public boolean worker;

    @Constraints.Required
    public String date = Index.getDate(null);


}

如果这是一个新实例,您需要将CascadeType.PERSIST添加到cascade选项中。这根本不是一个实例。只有空值:this.user=null;当我把它放在那里的时候,它就起作用了。我不使用此实体添加用户。我只想有参考用户!如果这是唯一的关系实体,那么代码中还有其他错误。发布所有相关代码。对象引用未保存的临时实例-在刷新之前保存临时实例:models.InconsistencyRegistry.personResponsibleForRemoval此字段似乎不为null。我确定它为null原因,我已检查它:System.out.printlunsistencyRegistryFromForm.removalPersonResponsibleFor==null;wich返回true,并且我还手动向其分配null值:unconsistencyRegistryFromForm.removalPersonResponsibleFor=null。对我来说,游戏框架有些问题