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
Java 如何在游戏中插入大量实体!工作?_Java_Jpa_Transactions_Batch File_Playframework - Fatal编程技术网

Java 如何在游戏中插入大量实体!工作?

Java 如何在游戏中插入大量实体!工作?,java,jpa,transactions,batch-file,playframework,Java,Jpa,Transactions,Batch File,Playframework,在我的应用程序中,我必须模拟各种情况进行分析。因此,在数据库中插入(非常)大量的行。(我们谈论的是大量数据……几十亿) 模型 工作 半小时后,数据库中仍然没有任何内容。但调试跟踪显示播放插入了一些内容。我怀疑这是某种缓存 我什么都试过了: Model.em().flush(); 什么都不会改变 Model.em().getTransaction().commit(); 发生Trows TransactionRequiredException:没有正在进行的事务 什么都不会改变 Model.e

在我的应用程序中,我必须模拟各种情况进行分析。因此,在数据库中插入(非常)大量的行。(我们谈论的是大量数据……几十亿)

模型 工作 半小时后,数据库中仍然没有任何内容。但调试跟踪显示播放插入了一些内容。我怀疑这是某种缓存

我什么都试过了:

Model.em().flush();
什么都不会改变

Model.em().getTransaction().commit();

发生Trows TransactionRequiredException:没有正在进行的事务

什么都不会改变

Model.em().getTransaction().commit();
我还尝试了@NoTransaction注释:

  • 控制器中的类与函数
  • 课堂案例
  • 在模型中重写save方法
  • 我的工作类别和职能
变得非常绝望。欢迎提出各种建议

编辑:稍作研究后,第一行出现在数据库中。相关ID约为550.000。这意味着大约有50万行位于我的应用程序和数据库之间

试试看

em.getTransaction().begin();
em.persist(model);
em.getTransaction().commit();
在开始事务之前,您不能提交它。

根据,作业应该像Play request那样启用自己的事务,所以这不是问题所在。尝试这样做:

for (int i = 0; i !=) {

  // Somestuff

  Case tmp = new Case(someString);
  tmp = JPA.em().merge(tmp);
  tmp.save();
}

这样做的目的是在保存之前将新创建的对象显式添加到EntityManager,确保该对象是将被持久化的“脏对象”的一部分。

您需要指示播放!当它应该通过使用以下注释之一@OnApplicationStart、@Every或@On来注释类来运行作业时


请检查播放!有关commit()引发什么异常的文档?TransactionRequiredException发生:没有正在进行的事务。这确实是一个解决方案。残忍但有效。添加了几千个插入的手动缓存。但这并不能告诉我为什么我的数据库仍然是空的。嗯,你使用的是什么样的数据库?更好的是,您可以发布您正在使用的数据库连接url吗?我使用的是Mysql连接(对于开发人员,生产中的Postgresql)和Play的默认jdbc配置。我也尝试过fs和mem,同样的行为。目前,找到了最好的解决方案。既然我没时间玩了,我就坚持下去。。。现在,这对我来说很有效。虽然没有使用@NoTransaction(我无法使用它),我只是简单地做了一个初始em.getTransaction().commit();在我的方法的一开始。当批处理提交到1000条记录的组中时,运行速度至少快一个数量级!触发工作不是问题,它工作得很好。是数据库本身的插入导致了这个问题。我只是试了一下。什么都不会改变。这些物品也没有经过检验。或者我应该说,不要出现在数据库中。@Zenkly完全奇怪,我知道我在作业中使用对象,并且它们是以事务方式修改/存储的。。。哦,好吧,至少你找到了解决办法:)
em.getTransaction().begin();
em.persist(model);
em.getTransaction().commit();
for (int i = 0; i !=) {

  // Somestuff

  Case tmp = new Case(someString);
  tmp = JPA.em().merge(tmp);
  tmp.save();
}