【问题标题】:Querydsl with jdbc - Maven configuration(querydsl plugin doesn't generate Q class)带有 jdbc 的 Querydsl - Maven 配置(querydsl 插件不生成 Q 类)
【发布时间】:2018-03-01 03:22:50
【问题描述】:

我想将 QueryDSL 与 JDBC(不是 JPA)一起使用。 所以在 pom.xml 我放了这些依赖和插件:

<dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-core</artifactId>
        <version>3.7.4</version>
    </dependency>

    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-sql</artifactId>
        <version>3.7.4</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.1</version>
    </dependency>
....
<plugins>
    <plugin>
          <groupId>com.mysema.querydsl</groupId>
          <artifactId>querydsl-maven-plugin</artifactId>
          <version>3.7.4</version>
          <executions>
            <execution>
              <goals>
                <goal>export</goal>
              </goals>
            </execution>            
          </executions>
          <configuration>
            <jdbc.url>jdbc:mysql://localhost:8889/chebuoni</jdbc.url>
                <jdbc.driver>com.mysql.cj.jdbc.Driver</jdbc.driver>
            <jdbcUser>root</jdbcUser>
            <jdbcPassword>root</jdbcPassword>
            <packageName>it.group.myproject</packageName>
            <targetFolder>/target/generated-sources/java</targetFolder>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>org.apache.derby</groupId>
              <artifactId>derby</artifactId>
              <version>10.13.1.1</version>
            </dependency>
          </dependencies>
        </plugin> 

    </plugins>

只有当我将 generic-export 作为目标时,Maven 才能毫无错误地进行构建,但在这种情况下,它不会创建我需要的 Q 类来使用 QueryDSL。 我还在包 it.group.myproject 中使用注释 @Entity 映射了我的类 Person

**********************编辑********************** 按照@Nikolas 的提示,我终于能够生成 Q 类,并在 pom 中添加了这个插件:

<plugin>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-maven-plugin</artifactId>
            <version>4.1.0</version>
            <configuration>
              <jdbc.url>jdbc:mysql://localhost:8889/myDB</jdbc.url>
              <jdbc.driver>com.mysql.cj.jdbc.Driver</jdbc.driver>
              <jdbc.user>root</jdbc.user>
              <jdbc.password>root</jdbc.password>
              <packageName>myPackage</packageName>
              <targetFolder>/target/generated-sources/java</targetFolder>
              <namePrefix>S</namePrefix>
                <imports>
                    <import>java.io</import>
                    <import>java.io.File</import>
                </imports>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>org.apache.derby</groupId>
                <artifactId>derby</artifactId>
                <version>10.13.1.1</version>
              </dependency> 
            </dependencies>
          </plugin>  

但是,entityManager 的一部分我不知道如何配置:

JPAQuery<?> queryFactory = new JPAQuery<Void>(entityManager);

我阅读了本教程 --> https://examples.javacodegeeks.com/enterprise-java/jpa/jpa-entitymanager-example/ 在其中似乎我需要一个 persistence.xml 文件以便我可以这样做:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("jcg-JPA");
    EntityManager em = emf.createEntityManager();

所以我以这种方式配置了持久性和实体管理器 bean:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="jcg-JPA" />
</bean>

这是persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 版本="2.0">

    <persistence-unit name="jcg-JPA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver" />
        <property name="hibernate.connection.username" value="root" />
        <property name="hibernate.connection.password" value="root" />
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:8889/myDB" />
    </properties>
    </persistence-unit>

但服务器在启动时失败:

org.apache.catalina.core.StandardContext listenerStart
GRAVE: Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
java.lang.NoSuchMethodError: 
org.springframework.beans.factory.annotation.InjectionMetadata: method 
<init>()V not found at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:351)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:295)

【问题讨论】:

  • 顺便说一句,由于您的原始问题(生成元数据)已得到解答,您可能要考虑不要混合不同的问题,而是关闭这个问题并就您当前的挑战提出另一个更具体的问题。跨度>
  • 是的...我很抱歉 :) ...现在我肯定被最后一个错误所困扰

标签: java maven jdbc querydsl


【解决方案1】:

你好像在这里混淆了一些东西,JDBC和JPA是两双不同的鞋,参考this post。您不能在这里没有 JPA,因为它有助于创建元模型。您甚至可以使用@Entity 自己引用它。您将同时使用 JDBC 和 JPA。

话虽如此,您的图书馆已经过时了。 They restructured their package structure some time ago. 我猜这会导致 NPE,因为 maven 插件需要 com.querydsl 类。

This is the current Git project。检查 .md 上的 maven 配置,这个应该可以工作。

This is the documentation to refer to.

(编辑)

EntityManager 通过 persistence.xml

我知道“我不想要休眠”-感觉,但此时您可能会发现适当的 JPA 实现很有用。您可以自己实现 JPA,但是……暂时不要这样做。无论如何,EntityManager 是 JPA-Territory。如果您不喜欢 Hibernate,请使用 EclipseLink。但是选了一个。然后,按照有关如何设置 persistence.xml 的教程进行操作(在其中指定实体管理器工厂,引入持久类并配置 DB-Connection)。然后,您可以按照教程中提到的名称来指代工厂。配置 JPA 超出了 QueryDSL-Tut 的范围,只是选择了 JPA-"Implementor" 提供的 how-to,它们相当不错。

春天
检查this post about setting up JPA the "Spring-Way",也许这就是你想要的。不过,它仍然需要您对 Hibernate 做出选择。这就是为什么我有点离开上面的段落。

(编辑2) 关于您的 persistence.xml,我认为您可能需要在您的 xml 中命名所有持久类 (Another link, another Tutorial),此时您指定无,因此扫描仪找不到任何。在 Spring 中,您可以指定“要扫描的包”,这基本上做了类似的工作。

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2019-03-25
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多