Я хочу иметь возможность использовать разные локаторы сущностей для одного и того же объекта домена. Я использую Twig
, и у него есть возможность загрузить объект полностью или частично. Когда я запускаю облегченный запрос fetchRangeLite
, вместо TwigLiteLocator
используется локатор TwigLocator
. Моя текущая реализация:
Прокси
@ProxyFor(value = MyDomain.class, locator = TwigLocator.class)
public interface MyDomainProxy extends EntityProxy {}
@ProxyFor(value = MyDomain.class, locator = TwigLiteLocator.class)
public interface MyDomainLiteProxy extends EntityProxy {}
Запрос
@Service(value = MyDao.class, locator = DaoServiceLocator.class)
public interface MyRequest extends RequestContext {
Request<List<MyDomainProxy>> fetchRange(Integer start, Integer length);
Request<Integer> getCount();
Request<List<MyDomainLiteProxy>> fetchRangeLite(Integer start, Integer length);
}
ДАО
public List<MyDomain> fetchRange(Integer start, Integer length) {
...
}
public List<MyDomain> fetchRangeLite(Integer start, Integer length) {
...
}
Я ожидал, что будет использоваться упрощенный локатор, но это не так. Так как же RF выбирает, какой локатор следует использовать для определенного типа домена?
ОБНОВЛЕНИЕ
Мой объект домена состоит из списка списков.
public class MyDomain extends DatastoreObject {
private List<A> a;
}
public class A {
private List<B> b;
}
Когда прокси моего объекта MyDomain
отправляется с сервера клиенту, Twig
также загружает все A
и все B
, что требует времени. Меня интересует только свойство объекта MyDomain
, поэтому я хочу использовать «облегченный» локатор.
TwigLocator
@Override
public DatastoreObject find(Class< ? extends DatastoreObject> clazz, Long id) {
ObjectDatastore myDatastore = datastoreProvider.get();
DatastoreObject object = myDatastore.load(clazz, id);
return object;
}
TwigLiteLocator
@Override
public DatastoreObject find(Class< ? extends DatastoreObject> clazz, Long id) {
ObjectDatastore myDatastore = datastoreProvider.get();
myDatastore.setActivationDepth(0);
DatastoreObject object = myDatastore.load(clazz, id);
return object;
}
myDatastore.setActivationDepth(0);
указывает хранилищу данных загружать только свойства в MyDomain
, а не свойства подуровня (списка).
Реализация DAO одинакова, поэтому идентификатор и версия одинаковы для обоих прокси.