假设我有三个正在运行的工作,其中有两个是相同的...因此:
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();
接着,在job2或job3中进行如下操作:
User user2 = User.findById(id);
用户2将会等于"null"还是等于"user1"?这意味着,即使用户1尚未被刷新/提交到数据库中,作业2或作业3是否能够通过ID查找它?
我认为这两个问题的核心是:作业(无论它们是相同作业的实例还是不同作业)是否共享EntityManagers,因此.em().flush()、.em().clear()或.em().getTransaction().commit()或Model.save()是否会同时影响所有的作业?