私は自分のコードに次の行を持っている:Spring JPAのキャッシュ - リポジトリから同じリソースを数回取得するのは避けるべきですか?
String productName = Utils.getProductName(productId, productRepository, language);
このutilのメソッドは、メソッドfindOne(productId)
を使用して製品を取得しますが、うまくいくつかの追加のロジックを持っています。私のコードの複数の場所で使用されています。一つの場所で
、数行下、私はProductオブジェクトを必要とするので、私は次のようにします。
ここProduct product = productRepository.findOne(productId);
を私は再び製品を取得するので、私たちは再びデータベースに同じ作用を有します。しかし、JPA(Hibernate)がオブジェクトをキャッシュするので、私はそれを心配する必要はないと信じています。パフォーマンスは影響を受けません。私は正しい?
もちろん、私はこのような重複を避けようとしています。しかしこの場合、リファクタリングgetProductName
メソッドは、このメソッドを使用する他の場所に影響を与えます。だから私はそれをそのまま残したいと思う。しかし、パフォーマンスのコストが目に見える場合は、私はコードを微調整する方がよいでしょう。
両方の呼び出しが同じトランザクションで行われている場合は、そうです。 SQLログを有効にして、自分で調べないのはなぜですか?特にHibernateをよく理解していないときに、どのクエリーが実行されているのかを理解するために、開発中にそれをオンにするのは良い考えです。 –
私はJPAに慣れていません。 SQLクエリがコンソールに表示されるという事実は、オブジェクトがデータベースで再び取り出されるか、それともまだキャッシュされ、実際には実行されないことを意味しますか? – kiedysktos
Hibernateは、SQLクエリーを実行する場合、それらを照会します。 –