Я ожидаю, что это необычный случай использования.Переходные поля с ленивой нагрузкой 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. Это означает, что супертяжелый код для поиска значения для каждого экземпляра Foo иногда бесполезно вызывается.
Как я могу избежать вызова кода, чтобы найти значение для bazz, если Foo.getBazz() фактически вызван?
Есть ли какая-то причина, по которой вы не можете управлять своим тяжеловесным кодом в Foo.getBazz()? Что делает супертяжеловес? – samlewis
Думаю, вам нужно реализовать некоторый тип прокси-класса. Но на самом деле я не понимаю, почему вы это делаете? И что такое супертяжелый код, много звонков? если это так, это неправильное место для этого. – varun
, пожалуйста, предоставьте свой прецедент, возможно, мы сможем помочь вам лучше. – varun