簡體   English   中英

帶有JDBC的Querydsl-Maven配置(querydsl插件不會生成Q類)

[英]Querydsl with jdbc - Maven configuration(querydsl plugin doesn't generate Q class)

我想將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>

僅當我將泛型導出作為目標時,Maven才能進行構建而不會出現錯誤,但是在這種情況下,它不會創建使用QueryDSL所需的Q類。 我的類Person也有it映射,它在包it.group.myproject中帶有注解@Entity

**********************編輯**********************以下@Nikolas技巧I終於能夠生成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();

所以我以這種方式配置了持久性和entitymanager 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“ version =” 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)

您似乎在這里有些困惑,JDBC和JPA是兩雙不同的鞋子,請參閱本文 您不能在這里沒有JPA,因為它有助於創建元模型。 您甚至可以使用@Entity自己引用它。 您將同時使用JDBC和JPA。

話雖這么說,您的圖書館已經過時了。 他們在一段時間前重組了包結構。 我猜想這會導致NPE,因為maven插件需要com.querydsl類。

這是當前的Git項目 檢查.md上的Maven配置,這應該可以工作。

這是要參考的文檔

(編輯)

通過persistence.xml的EntityManager

我知道“我不希望休眠”的感覺,但是,此時您可能會發現適當的JPA實施很有用。 可以自己實現JPA,但是...尚未實現。 無論如何, EntityManager是JPA區域。 如果您不喜歡Hibernate,請使用EclipseLink。 但是選擇了一個。 然后,按照有關如何設置persistence.xml的教程進行操作(在其中,您可以指定實體管理器工廠,介紹持久性類並配置DB-Connection)。 然后,您可以按照本教程中提到的名稱來引用工廠。 配置JPA不在QueryDSL-Tut的范圍內,只是選擇了JPA-“ Implementor”提供的方法,它們相當不錯。

彈簧
查看有關設置“ Spring-Way” JPA的文章 ,也許這就是您想要的。 不過,它仍然需要您在休眠方面做出選擇。 這就是為什么我離開了上面的段落。

(Edit2)關於persistence.xml,我認為您可能需要在xml中命名所有持久性類( 另一個鏈接,另一個Tutorial ),但現在都未指定,因此掃描程序找不到任何持久性類。 在Spring中,您可以指定“要掃描的程序包”,基本上可以完成類似的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM