LoginSignup
0
0

SpringDataJPAで1回のリクエストで2回findAll()すると、1回目の結果に2回目の結果がマージ?されてしまう

Posted at

環境

名称 バージョン
Spring Boot 3.1.5
SpringDataJPA 3.1.5
Hibernate 6.2.13
MySQL 8.0.34

問題

Serviceクラスから、findAll(Specification, Sort)を、Specificationの内容を変えて2回呼び出したら、2回目の戻り値に1回目の取得結果が混ざってしまった。

例えば、

1回目:where item_name='りんご'で抽出
1回目の戻り値:item_nameが「りんご」のエンティティのリスト
2回目:where item_name='バナナ'で抽出
2回目の戻り値:item_nameが「りんご」と「バナナ」のエンティティのリスト

…といった具合。(実際には条件によって半端にマージされたりされなかったり)

DBの実行SQLログは、想定通りの結果を出すSQLを実行している。
AP側で何かしら処理をしているんだろうとは思ったものの、何故そうなるかわからなかった。

Serviceクラスには、クラスに対して@Transactional(readOnly = true)を指定している。

解決方法

ServiceでEntityManager#clear()した。

後書き

Entityに@Cacheable(value = false)を付けるだけでは動作しなかった。
あと、何かが根本的に間違ってる気がする。。DB操作する度にキャッシュクリアするもんなのかあ…?

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0