可以說我有三份工作當前正在運行,其中兩個是相同的......所以:做工作共享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