java如何在游戏中插入大量实体!工作
在我的应用程序中,我必须模拟各种情况进行分析。因此,在数据库中插入(非常)大量的行。(我们谈论的是大量数据……几十亿)
模型
@Entity
public class Case extends Model {
public String url;
}
工作
public class Simulator extends Job {
public void doJob() {
for (int i = 0; i !=) {
// Somestuff
new Case(someString).save();
}
}
}
半小时后,数据库中仍然没有任何内容。但调试跟踪显示播放插入了一些内容。我怀疑这是某种缓存
我什么都试过了:
Model.em().flush();
什么都不会改变
Model.em().getTransaction().commit();
引发TransactionRequiredException:没有正在进行的事务
Model.em().setFlushMode(FlushModeType.COMMIT);
Model.em().setFlushMode(FlushModeType.AUTO);
什么都不会改变
我还尝试了@NoTransaction注释:
- 类别及;控制器中的函数
- 课堂案例
- 在模型中重写save方法
- 类别及;我的工作职能
变得非常绝望。欢迎提出各种建议
编辑:稍作研究后,第一行出现在数据库中。相关ID约为550.000。这意味着大约有50万行位于我的应用程序和数据库之间
# 1 楼答案
根据documentation,作业应该像播放请求一样启用自己的事务,所以这不是问题所在。尝试这样做:
其思想是在保存之前将新创建的对象显式添加到EntityManager,确保该对象是将被持久化的“脏对象”的一部分
# 2 楼答案
试一试
在开始事务之前,不能提交它
# 3 楼答案
你需要指导游戏!当它应该通过使用以下注释之一@OnApplicationStart、@Every或@On来注释类来运行作业时
请检查播放!关于jobs的文件