(JPA+Hibernate)LazyよりもEagerがいい気がしてきた

二つのFetchMode

HibernateだとLazyがデフォルトなんだけれども、その上にJPAがかぶさるとEagerがデフォルトになる。
昔、Hibernateを直接扱っていたときはLazyがいいなぁと思っていたけれども、最近はEagerのほうがいい気がしてきた。

Eagerの方が楽じゃないか?

Lazyだと、n+1問題とかトランザクション境界とかの問題があるから面倒くさいと思う。
とりあえずEagerにしておけば何も考えなくてもそんな問題は起きないのでアプリケーションの動作保証は取りやすいと思う。

Eagerにしたときの問題もあるけれども

ただ、全部Eagerにしてしまうと取得するデータ量が多くなるので、性能的には厳しくなる気がする。
ただし、その場合はJPQLで何とかすればいいのではないかと思う。
とりあえず、大量のデータを扱う場合はコンストラクタ文、バルクインサート/バルクアップデート(SQLでinsert文、update文を投げる感じ)
を使用すれば大丈夫な気がする。

ただ、JPQLってどうなんだろう

コンストラクタ文を見ていると、JavaBeans規約に則っていないので、なんとなく違和感を感じる。
なんでJavaBeans規約とずらしたのだろう?
また、Entityのアノテーションの影響を受けなかったりする場合もあるので、使いにくい気がする。
ついでに、S2JDBCやらJDOQLに比べるとなんとなく洗練されていない印象がある。

今後に期待なのかなぁ?