ので...私が同一であるそのうちの2つは、現在実行中の3つのジョブを、考えてみましょう:ジョブは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();
そしてJOB2またはJOB3に私が行います
User user2 = User.findById(id);
は「 "ヌル" に等しいか等しくなるUSER2ますuser1 "?つまり、user1がまだデータベースにフラッシュされていない場合でも、job2またはjob3はIdでそれを探すことができますか?
これらの質問は、Jobs(同じJobまたは異なるJobのインスタンス化であるかどうかにかかわらず)がEntityManagersを共有するかどうか、つまり.em().flush()、.em() clear()または.em()。getTransaction()。commit()またはModel.save()はすべてのジョブに同時に影響しますか?
は言うことができますJOB1とJOB2(同じジョブの2つのインスタンス)processQueue()と呼ばれる 'doJob()'と同じメソッドを呼び出します。したがって、 'processQueue(){}'内にある場合、job1またはjob2がprocessQueueを呼び出すかどうかによって異なるトランザクションが返されるというJPA.em()。getTransactionを実行しますか?同様に、job1の 'JPA.em()。clear'を実行しているということは、現在job2にアタッチされているエンティティには影響しません。 – HelpMeStackOverflowMyOnlyHope
JPA.em()。getTransaction()。commit()の後にJPA.em()を実行する理由は何ですか? commit()は、すでにデータベースに書き出すことができるすべてのものをフラッシュ/シンクしませんか? – HelpMeStackOverflowMyOnlyHope
答えをありがとう、私はimmediaetly保存する必要があるエンティティの多くがあります。だから、私はこのコードをvoid名の "saveEntities"に入れて、imeediate updateが必要な場所から呼び出します。 – dreampowder