CLOBなどの大きなフィールドのHibernateでの処理のまとめ
最近、プロジェクトのフロントページを表示するときにClob大フィールドエンティティ(UserEntity.java)が存在するクエリー操作を行い、一部の表示ページで大フィールドを表示する必要がないことを考慮して、hibernateが普通の属性を遅延キャプチャしていることを聞いたことがあるので、Referenceを見てみると、この遅延キャプチャを構成するのは簡単ではないことがわかりました.実行時のバイトコードの強化が必要で、一見めまいがして、ネット上で資料を調べて、大きなフィールドのクエリー処理の問題について、まとめて、初歩的に3種類の実現方案があります:1、hibernateの属性を使って遅延して捕まえて、属性の上でfetch=FetchTypeを定義します.LAZYは、次にクラスエンハンサーを介してバイナリClassファイルを強化処理し、ANTによりHibernateクラスエンハンサー対UserEntityを呼び出す.classファイルは強化処理を行い、スクリプトは以下の通りです.
注意:スクリプトに含まれる構成パスは、プロジェクトディレクトリに基づいて変更されます.
2、UserEntityエンティティを2つのエンティティに分解し、UserEntityにはClob属性は含まれず、UserDetailEntityは引き続きUserEntityからBlob属性を含む.通常のクエリではUserEntityオブジェクトをクエリし、Clog要件のあるUserを処理するときにUserDetailEntityオブジェクトを使用します.
3、そんなに複雑にしないで、直接sqlを書いて照会して、そのフィールドがほしいので、自分でそのフィールドを取ります.
<project name="HibernateSample" default="instrument" basedir=".">
<property name="lib.dir" value="./lib"/>
<property name="classes.dir" value="./bin"/>
<path id="lib.class.path">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
<target name="instrument">
<taskdef name="instrument"
classname="org.hibernate.tool.instrument.InstrumentTask">
<classpath path="${classes.dir}"/>
<classpath refid="lib.class.path"/>
</taskdef>
<instrument verbose="true">
<fileset dir="${classes.dir}/com/cn/hibernate/db/entity">
<include name="UserEntity.class"/>
</fileset>
</instrument>
</target>
</project>
注意:スクリプトに含まれる構成パスは、プロジェクトディレクトリに基づいて変更されます.
2、UserEntityエンティティを2つのエンティティに分解し、UserEntityにはClob属性は含まれず、UserDetailEntityは引き続きUserEntityからBlob属性を含む.通常のクエリではUserEntityオブジェクトをクエリし、Clog要件のあるUserを処理するときにUserDetailEntityオブジェクトを使用します.
3、そんなに複雑にしないで、直接sqlを書いて照会して、そのフィールドがほしいので、自分でそのフィールドを取ります.