これは珍しいユースケースだと思います。
エンティティ クラス Foo があるとします。
@Entity
public class Foo {
@Id
private Long id;
private String bar;
@Transient
private long bazz;
...
}
また、データベースから Foo のインスタンスが読み取られたときに Foo.bazz が初期化されるように Interceptor を定義しています。
public class MyInterceptor extends EmptyInterceptor {
...
@Override
public boolean onLoad(
Object entity,
Serializable id,
Object[] state,
String[] propertyNames,
Type[] types) {
if(entity instanceof Foo) {
Foo foo = (Foo)entity;
long bazzValue = ... // some very heavyweight code
foo.setBazz(bazzValue);
}
return false;
}
...
}
ここまでは順調ですね。しかし、すべてのコード パスがすべての Foo インスタンスの bazz フィールドの値を必要とするわけではありません。これは、Foo のすべてのインスタンスの値を見つけるための重いコードが、不必要に呼び出される場合があることを意味します。
Foo.getBazz() が実際に呼び出されない限り、bazz の値を見つけるためにコードを呼び出さないようにするにはどうすればよいですか?