Hallo,
ich habe folgendes Problem:
Ich möchte von meinem Frontend Controller eine Query (WHERE Bedingung weitergeben an meine Datenbankschicht).
Ich meinem Frontend Controller generiere ich mir hierfür ein Predicate Objekt:
Das ist eine Hilfsklasse / Methode von jpaUtilBean, das mir ItemRoot und CriteryQuery / Builder generiert...
Da ich Primefaces verwende, wird ebenfalls hier eine neue Query erzeugt (siehe Implementierung von JpaLazyDataModel von Primefaces)
Siehe auch: https://primefaces.github.io/primefaces/12_0_0/#/components/datatable?id=lazy-loading
Ich habe nun mir eine Klasse erstellt, die mir eine Liste aus Predicate aus dem Controller durchschleift:
Das Problem ist nun aber, wenn ich die Predicate aus der Controller Klasse durchschleife, erhalte ich einen anderen Alias:
Invalid path: [select count(generatedAlias0) from de.test.model.MyClass as generatedAlias0 where generatedAlias1.deleteFlag = false]
Kann hier jemand helfen?
ich habe folgendes Problem:
Ich möchte von meinem Frontend Controller eine Query (WHERE Bedingung weitergeben an meine Datenbankschicht).
Ich meinem Frontend Controller generiere ich mir hierfür ein Predicate Objekt:
Java:
List<Predicate> predicatesList = new ArrayList<>();
JpaCriteriaHelper jpaCriteriaHelper = jpaUtilBean.createCriteriaBuilder(PicGallery.class);
Root<PicGallery> itemRoot = jpaCriteriaHelper.getItemRoot();
CriteriaBuilder criteriaBuilder = jpaCriteriaHelper.getCriteriaBuilder();
predicatesList.add(criteriaBuilder.isFalse(itemRoot.get("deleteFlag")));
Das ist eine Hilfsklasse / Methode von jpaUtilBean, das mir ItemRoot und CriteryQuery / Builder generiert...
Code:
@SuppressWarnings({ "unchecked", "rawtypes" })
public <T> JpaCriteriaHelper createCriteriaBuilder(Class<T> entityClass) {
JpaCriteriaHelper jpaCriteriaHelper = new JpaCriteriaHelper();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
jpaCriteriaHelper.setCriteriaBuilder(criteriaBuilder);
CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(entityClass);
jpaCriteriaHelper.setCriteriaQuery(criteriaQuery);
Root<T> itemRoot = criteriaQuery.from(entityClass);
jpaCriteriaHelper.setItemRoot(itemRoot);
return jpaCriteriaHelper;
}
Da ich Primefaces verwende, wird ebenfalls hier eine neue Query erzeugt (siehe Implementierung von JpaLazyDataModel von Primefaces)
LazyDataModel - primefaces 11.0.0-RC1 javadoc
www.javadoc.io
Siehe auch: https://primefaces.github.io/primefaces/12_0_0/#/components/datatable?id=lazy-loading
Ich habe nun mir eine Klasse erstellt, die mir eine Liste aus Predicate aus dem Controller durchschleift:
Code:
public class LazyLoadingHelper<T> {
private JpaLazyDataModel jpaLazyDataModel;
public LazyLoadingHelper(Class<T> entityClass, List<Predicate> predicatesList, EntityManager entityManager) {
this.jpaLazyDataModel = createJpaLazyDataModel(entityClass, predicatesList, entityManager);
}
public <T> JpaLazyDataModel createJpaLazyDataModel(Class<T> entityClass, List<Predicate> predicatesList,
EntityManager entityManager) {
JpaLazyDataModel lazyModel = new JpaLazyDataModel<T>(entityClass, () -> entityManager, "id") {
@Override
protected void applyGlobalFilters(CriteriaBuilder cb, CriteriaQuery<?> cq, Root<T> root,
List<Predicate> predicates) {
if (predicatesList != null && !predicatesList.isEmpty()) {
for(Predicate p : predicatesList) {
Predicate finalQuery = cb.and(p);
predicates.add(finalQuery);
}
}
}
Das Problem ist nun aber, wenn ich die Predicate aus der Controller Klasse durchschleife, erhalte ich einen anderen Alias:
Invalid path: [select count(generatedAlias0) from de.test.model.MyClass as generatedAlias0 where generatedAlias1.deleteFlag = false]
Kann hier jemand helfen?