0
我認爲這是一個不尋常的用例。Hibernate延遲加載瞬態字段
說我有一個實體類Foo:
@Entity
public class Foo {
@Id
private Long id;
private String bar;
@Transient
private long bazz;
...
}
我也有一個攔截器定義成Foo.bazz被初始化時的Foo實例從數據庫中讀取:
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的每個實例找到一個值有時會被不必要地調用。
如何避免調用代碼來查找bazz的值,除非實際調用Foo.getBazz()?
是否有任何理由你不能在Foo.getBazz()中運行你的重量級代碼?什麼是重量級的做法? – samlewis
我想你需要實現一些類型的代理類。但我真的不明白你爲什麼這樣做?什麼是重量級代碼,很多數據庫調用?如果是這樣,這是做錯的地方。 – varun
請提供您的使用案例,可能是我們可以更好地爲您提供幫助。 – varun