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