当我使用带有ServiceLocator和Locator构造的RequestFactory请求实体列表时,GWT会执行n + 1个SQL调用。
//HcpcsDAOBean
@Singleton
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class HcpcsDAOBean {
@Inject
@DatasourceAnnotation
EntityManager em;
....
public Hcpcs find(Long id) {
return em.find(Hcpcs.class, id);
}
}
//BeanLocator
public class BeanLocator implements ServiceLocator {
@Override
public Object getInstance(Class<?> clazz) {
return lookupBean(clazz);
}
@SuppressWarnings({"unchecked", "CallToThreadDumpStack"})
public static <T> T lookupBean(Class<T> clazz) {
try {
return (T) InitialContext.doLookup("java:module/" + clazz.getSimpleName());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
//RequestFactory and RequestContext
public interface AppRequestFactory extends RequestFactory{
@Service(value=HcpcsDAOBean.class, locator=BeanLocator.class)
interface HcpcsServiceRequest extends RequestContext{
Request<Void> persist(HcpcsProxy hcpcsProxy);
Request<Void> remove(HcpcsProxy hcpcsProxy);
Request<List<HcpcsProxy>> findEntries(int firstResult, int maxResult );
Request<List<HcpcsProxy>> findAll();
}
HcpcsServiceRequest hcpcsServiceRequest();
}
答案 0 :(得分:0)
我认为这与此处的问题相同:requestfactory and findEntity method in GWT。
Altough,这也适用于没有使用Locator或ServiceLocator的构造。
我有同样的问题并理解,RequestFactory需要检查实体是否存在,但这对于像findAll()这样的调用来说真的很有用,或者我错过了什么?
有没有办法禁用某些服务方法的isLive检查?我知道我可以覆盖定位器中的isLive方法并返回true,例如,但这会禁用每次服务调用的检查,我不想错过此功能进行持久或删除操作。