Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The type com.querydsl.core.types.Predicate cannot be resolved. It is indirectly referenced from required .class files

I have a Maven Spring-Hibernate-JPA-QueryDsl web application in Eclipse that is giving the error The type com.querydsl.core.types.Predicate cannot be resolved in a CommonRepositoryImpl.java class. The error marker appears at the package declaration of the class. Here is the java class in question:

package com.kletus.silentHomeCemetery.frameworkextension;

import com.kletus.silentHomeCemetery.frameworkextension.InjectLogger;

import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import com.mysema.query.jpa.JPQLQuery;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.Filter;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.QueryDslJpaRepository;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.transaction.annotation.Transactional;

@SuppressWarnings("unchecked")
@NoRepositoryBean
@Transactional
public class CommonRepositoryImpl<T, ID extends Serializable> extends
    QueryDslJpaRepository<T, ID> implements CommonRepository<T, ID>,
    Serializable

{
    private static final long serialVersionUID = 1L;

@InjectLogger
private Logger logger;

private final JpaEntityInformation<T, ID> entityInformation;
private final EntityManager em;
//private final DefaultPersistenceProvider provider;

private Class<?> springDataRepositoryInterface;

public Class<?> getSpringDataRepositoryInterface() {
    return springDataRepositoryInterface;
}

public void setSpringDataRepositoryInterface(
        Class<?> springDataRepositoryInterface) {
    this.springDataRepositoryInterface = springDataRepositoryInterface;
}

/**
 * Creates a new {@link SimpleJpaRepository} to manage objects of the given
 * {@link JpaEntityInformation}.
 * 
 * @param entityInformation
 * @param entityManager
 */
public CommonRepositoryImpl(JpaEntityInformation<T, ID> entityInformation,
        EntityManager entityManager, Class<?> springDataRepositoryInterface) {
    //QueryDslJpaRepository(JpaEntityInformation<T,ID> entityInformation, javax.persistence.EntityManager entityManager);
    super(entityInformation, entityManager);
    this.entityInformation = entityInformation;
    this.em = entityManager;
    //this.provider = DefaultPersistenceProvider.fromEntityManager(entityManager);
    this.springDataRepositoryInterface = springDataRepositoryInterface;
}

/**
 * Creates a new {@link SimpleJpaRepository} to manage objects of the given
 * domain type.
 * 
 * @param domainClass
 * @param em
 */
//public QueryDslRepositoryImpl(Class<T> domainClass, EntityManager em) {
    //this(JpaEntityInformationSupport.getMetadata(domainClass, em));
//}

public <S extends T> S save(S entity) {
    if (this.entityInformation.isNew(entity)) {
        this.em.persist(entity);
        //flush();
        return entity;
    }else{
    entity = this.em.merge(entity);
    //flush();
    return entity;
    }
}

public T saveWithoutFlush(T entity) {
    return super.save(entity);
}

public List<T> saveWithoutFlush(Iterable<? extends T> entities) {
    List<T> result = new ArrayList<T>();
    if (entities == null) {
        return result;
    }

    for (T entity : entities) {
        result.add(saveWithoutFlush(entity));
    }
    return result;
}

public List queryNatively(String nativeQueryName,
        LinkedHashMap<String, Class<?>> inEntityClasses, Map<String, Object> inParams) {
    SQLQuery query = this.createHibernateNativeQuery(nativeQueryName,
            inParams);
    // add entities
    if (inEntityClasses != null) {
        for (Object key : inEntityClasses.keySet()) {
            String entityClassAlias = key.toString();
            Class<?> entityClass = (Class<?>) inEntityClasses.get(key);
            query.addEntity(entityClassAlias, entityClass);
        }
    }

    // add parameter
    if (inParams != null) {
        for (Object key : inParams.keySet()) {
            String queryParamName = key.toString();
            Object queryParamValue = inParams.get(key);
            query.setParameter(queryParamName, queryParamValue);
        }
    }
    return (query != null) ? query.list() : null;
}

public List<?> queryNativelyForDto(String nativeQueryName, 
        Map<String, Object> inParams, Class<?> dtoClass) {
    SQLQuery query = this.createHibernateNativeQuery(nativeQueryName,
            inParams);

    // add parameter
    if (inParams != null) {
        for (Object key : inParams.keySet()) {
            String queryParamName = key.toString();
            Object queryParamValue = inParams.get(key);
            query.setParameter(queryParamName, queryParamValue);
        }
    }

    return (query != null) ? query.setResultTransformer(
                new ResultTransformerEx(dtoClass)).list() : null;
}

private SQLQuery createHibernateNativeQuery(String nativeQueryName,
        Map inParams) {
    if (CommonRepository.class
            .isAssignableFrom(getSpringDataRepositoryInterface())) {

        Annotation nativeQueryAnn = getSpringDataRepositoryInterface()
                .getAnnotation(NativeQueries.class);
        if (nativeQueryAnn != null) {
            NativeQueries nativeQueries = (NativeQueries) nativeQueryAnn;
            NativeQuery[] queries = nativeQueries.queries();
            for (NativeQuery sqlquery : queries) {

                if (StringUtils.equals(nativeQueryName, sqlquery.name())) {
                    String sql = sqlquery.sql();

                    Session hiernateSess = (Session)em.getDelegate();
                                    //em.unwrap(Session.class); //Only in JPA 2
                    SQLQuery query = hiernateSess.createSQLQuery(sql);

                    // add parameter
                    if (inParams != null) {
                        for (Object key : inParams.keySet()) {
                            String queryParamName = key.toString();
                            Object queryParamValue = inParams.get(key);
                            query.setParameter(queryParamName,
                                    queryParamValue);
                        }
                    }

                    return query;
                }
            }
        }
    }
    return null;
}

public List<T> doQueryWithFilter(String filterName, String filterQueryName,
        Map<String, Object> inFilterParams, Map<String, Object> inQueryParams) {
    if (CommonRepository.class
            .isAssignableFrom(getSpringDataRepositoryInterface())) {
        Annotation entityFilterAnn = getSpringDataRepositoryInterface()
                .getAnnotation(EntityFilter.class);
        if (entityFilterAnn != null) {
            EntityFilter entityFilter = (EntityFilter) entityFilterAnn;
            FilterQuery[] filterQuerys = entityFilter.filterQueries();
            for (FilterQuery fQuery : filterQuerys) {
                if (StringUtils.equals(filterQueryName, fQuery.name())) {
                    String jpql = fQuery.jpql();
                    Session sess = (Session) em.getDelegate(); //em.unwrap
                    Filter filter = sess.enableFilter(filterName);

                    // set filter parameter
                    for (Object key : inFilterParams.keySet()) {
                        String filterParamName = key.toString();
                        Object filterParamValue = inFilterParams.get(key);
                        filter.setParameter(filterParamName,
                                filterParamValue);
                    }

                    // set query parameter
                    Query query = em.createQuery(jpql);
                    for (Object key : inQueryParams.keySet()) {
                        String queryParamName = key.toString();
                        Object queryParamValue = inQueryParams.get(key);
                        query.setParameter(queryParamName, queryParamValue);
                    }
                    return query.getResultList();
                }
            }
        }
    }
    return null;
}       

}

Here is my pom.xml file:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org        /2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-    v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>EclipseWorks</groupId>
   <artifactId>SilentHomeCemetery</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>SilentHomeCemetery Maven Webapp</name>
  <url>http://maven.apache.org</url>  
<properties>
    <!-- Generic properties -->
    <java.version>1.7</java.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>

    <!-- Spring -->
    <spring-framework.version>3.1.2.RELEASE</spring-framework.version>
    <aspectj.version>1.7.4</aspectj.version>

    <!-- Hibernate / JPA -->
    <hibernate.version>4.1.7.Final</hibernate.version>

    <!-- JSF Version -->
    <jsf.version>2.2.10</jsf.version>

    <!-- Logging -->
    <logback.version>1.0.13</logback.version>
    <slf4j.version>1.7.5</slf4j.version>    
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.ibm.db2</groupId>
        <artifactId>db2jcc4</artifactId>
    </dependency>

    <dependency>
        <groupId>com.ibm.db2</groupId>
        <artifactId>db2jcc4_license_cu</artifactId>
    </dependency>

    <!-- Spring and Transactions -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons-core</artifactId>
    </dependency>

    <!-- @Inject -->
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
    </dependency>
    <!-- AspectJ -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
    </dependency>
    <!-- Spring ORM support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
    </dependency>

    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
    </dependency>

    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
    </dependency>

    <!-- JSF Dependencies -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
    </dependency>

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
    </dependency>

    <!-- Logging with SLF4J & LogBack -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!-- http://repo1.maven.org/maven -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
    </dependency>

    <dependency>
        <groupId>com.sun.el</groupId>
        <artifactId>el-ri</artifactId>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-binding</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.webflow</groupId>
        <artifactId>spring-faces</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webflow</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>3.4.3</version>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-core</artifactId>
        <version>2.9.0.FIXED</version>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
        <version>2.9.0.FIXED</version>
    </dependency>       
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-sql</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.inject.extensions</groupId>
        <artifactId>guice-servlet</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-sql</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-collections</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-codegen</artifactId>
        <version>2.9.0.FIXED</version>
    </dependency>
</dependencies>
<build>
<pluginManagement>
    <plugins>

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.10</version>
        <executions>
            <execution>
                <id>add-resource</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>add-source</goal>
                </goals>
                <configuration>
                    <sources>
                        <source>src/main/resources</source>
                    </sources>
                </configuration>
            </execution>
        </executions>
    </plugin>

    <plugin>
        <groupId>com.mysema.maven</groupId>
        <artifactId>apt-maven-plugin</artifactId>
        <version>1.1.3</version>
        <executions>
            <execution>
                <goals>
                    <goal>process</goal>
                </goals>
                <configuration>
                    <outputDirectory>src/main/resources</outputDirectory>
                    <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                </configuration>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>com.mysema.querydsl</groupId>
                <artifactId>querydsl-apt</artifactId>
                <version>2.9.0</version>
            </dependency>
        </dependencies>            
    </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <webResources>
                    <resource>
                        <filtering>true</filtering>
                        <directory>src/main/webapp/WEB-INF</directory>
                        <includes>
                            <include>**/*.xhtml</include>
                            <include>**/*.xml</include>
                        </includes>
                    </resource>
                    <resource>
                        <filtering>true</filtering>
                        <directory>src/main/resources</directory>
                        <includes>
                            <include>**/*.xml</include>
                            <include>**/*.properties</include>
                        </includes>
                        <targetPath>WEB-INF/classes</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
        </plugin>
        <plugin>
            <groupId>org.bsc.maven</groupId>
            <artifactId>maven-processor-plugin</artifactId>
            <version>3.1.0</version>
        </plugin>
    </plugins>

    </pluginManagement>
</build>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.ibm.db2</groupId>
            <artifactId>db2jcc4</artifactId>
            <version>10.1.200.238</version>
        </dependency>
        <dependency>
            <groupId>com.ibm.db2</groupId>
            <artifactId>db2jcc4_license_cu</artifactId>
            <version>10.1.200.238</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons-core</artifactId>
            <version>1.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>${jsf.version}</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>${jsf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.el</groupId>
            <artifactId>el-ri</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>5.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-binding</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.webflow</groupId>
            <artifactId>spring-faces</artifactId>
            <version>2.4.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webflow</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.6.2</version>
        </dependency>
        <!-- http://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.10.0.RELEASE</version>
        </dependency>           
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.inject.extensions</groupId>
            <artifactId>guice-servlet</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.3.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.1.9.Final</version>
        </dependency>
    </dependencies>
</dependencyManagement>

like image 971
John M. Yount Avatar asked Jun 29 '16 04:06

John M. Yount


2 Answers

For some reason there are two groupfor querydsl. One is com.querydsl, the other one is com.mysema.querydsl. It seems that spring works with the first one, while you use the other one. You can find that spring require com.querydsl.core.types.Predicate, but in the com.mysema.querydsl version the package name is com.mysema.query.types.Predicate.

Long story short spring needs com.querydsl. Configuration that worked for me was:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.10.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-commons</artifactId>
        <version>1.12.2.RELEASE</version>
    </dependency>
   <dependency>
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-core</artifactId>
        <version>4.1.3</version>
    </dependency>
    <dependency> 
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId> 
        <version>4.1.3</version>
    </dependency>
    <dependency> 
        <groupId>com.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId> 
        <version>4.1.3</version> 
    </dependency>
like image 147
Dariusz Dudziński Avatar answered Oct 11 '22 05:10

Dariusz Dudziński


I had this problem. You can use this document to solve this.

According to this document we can use below dependency and plugging

        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>4.1.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>4.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>

and

           <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/generated-sources/java</outputDirectory>
                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

and have to override customize method. This is a example repository for that case.

public interface UserRepository extends PagingAndSortingRepository<User, Long>,QueryDslPredicateExecutor<User>,QuerydslBinderCustomizer<QUser> {


    @Override
    default public void customize(QuerydslBindings bindings, QUser root) {
        bindings.bind(String.class).first(
          (StringPath path, String value) -> path.containsIgnoreCase(value));
        bindings.excluding(root.email);
    }
}
like image 25
wthamira Avatar answered Oct 11 '22 07:10

wthamira