可以说我有三份工作当前正在运行,其中两个是相同的......所以:做工作共享EntityManagers - 玩!框架
CrawlJob job1 = new CrawlJob();
CrawlJob job2 = new CrawlJob();
CurrentJob job3 = new CurrentJob();
job1.now()
job2.now()
job3.now()
如果我这样做在JOB1如下:
JPA.em().flush();
JPA.em().clear();
威尔也脱离一切job2和job3当前正在处理的实体?这意味着如果我在job2/job3中查看数据库中的实体/模型对象,那么job2/job3很可能会因为对象刚刚脱离会话而中断?
同样,可以说我做JOB1如下:
long id = 123
User user1 = new User(id);
user1.save();
然后在作业2或作业3我做的:
User user2 = User.findById(id);
将用户2等于“空”或者等于“ USER1" ?这意味着,即使user1尚未刷新/提交到数据库,job2或job3是否能够通过Id查找它?
我认为这两个问题都是在于乔布斯(无论他们是否是同一个工作实例或不同的工作)共享EntityManagers,因此.em()。flush(),.em()。 clear()或.em()。getTransaction()。commit()或Model.save()会同时影响所有作业?
比方说JOB1和作业2(同一作业的2个实例)在称为processQueue()的'doJob()'中调用相同的方法。因此,如果在'processQueue(){}'我做'JPA.em()。getTransaction',你说一个不同的交易将被返回,取决于job1或job2是否称为processQueue?同样,这听起来像你所说的,在job1中执行'JPA.em()。clear'将不会影响job2中当前可能连接的实体。在你提供的例子中也有 – HelpMeStackOverflowMyOnlyHope 2012-03-25 13:36:14
,你为什么在JPA.em().getTransaction()。commit()之后做JPA.em()。flush()? commit()不会与数据库刷新/同步所有数据已经可以写出来吗? – HelpMeStackOverflowMyOnlyHope 2012-03-25 13:37:45
感谢您的答复,我有很多需要立即保存的实体。所以我把这段代码放入一个无效名称“saveEntities”中,并从任何需要更新的地方调用它。 – dreampowder 2012-11-21 11:34:53