タイトル通りなんですが、またまたToplinkです…。FetchType.LAZYとラージオブジェクトの使い方に関して…。
データベース上のLOB形(BLOBやらCLOB)を格納したレコードにそれらのカラムを含まないクエリを投げておき、実際に必要になった時だけそれらのカラムを取得する。これはたぶんそんなレアな事ではないはず。例えば、個人のプロフィールと一緒に顔写真もDB上に格納し、普通の業務ではプロフィールのカラムだけを処理し、顔写真のいる書類の時だけそのカラムも処理する。こうすれば普通の業務で100人分のデータが必要って時に、何十キロバイトもある顔写真×100人分の巨大なデータを受け取らなくて済む。この場合、顔写真のカラムに対応するプロパティに@Basic(fetch=FetchType.LAZY)@Lobってな感じになる。
が、しか〜し、、、glassfishのログを追跡していると、何やら怪しげな内容が…
oracle.toplink.essentials.session.file:/C:/Sun/SDK/domains/domain1/applications/j2ee-apps/ear/ejb_jar/-ejb.ejb_or_metadata|_ThreadID=10;_ThreadName=main;_RequestID=8baaf9b2-fd82-4307-bbb9-c0dfc6b34821;|Ignoring LAZY fetch type on element [private byte[] entity.PictureItemBean.image] within entity class [class entity.PictureItemBean]. All basic mappings default to use EAGER fetching.|#]
な、何これ?嘘!勝手にEAGERにされちゃった…。いや、確かにJPAの実装には、LAZYはあくまでヒントだから別にそうしなくてもいいよってあるけど…。ここ一番美味しい所では?でも、よく調べるとToplinkのサイトでも、確かに@Basicマッピングは問答無用でEAGERだって書いてるけど…。嘘ぉーん。えー…結局よく調べなかったおいらが悪いってオチですか?…み…認めん…こんなん仕様にしやがって…ほとんどバグじゃないか…。た…例え…お天道様が認めても…おいらは…おいらは…自分の非だけは認めんぞー!!くわぁー!(泣)



感動しました。
ちょくちょく来ます(@Å@)!!!