您好,我在组合QueryDSL JPA和SQL时有一个关于代码生成的问题。根据QueryDQL创建者的SO问题的答案,这两个模块的组合是CRUD操作(JPA)和查询(SQL)的流行用法。
成功使用JPA模块后,我尝试添加SQL模块,但我不知道是否应该将SQL代码生成添加到pom。
事实上,我正在寻找插入功能而我无法在JPA模块中找到它,这就是我尝试使用SQL的原因。
此外,当我尝试从 QueryDslPredicateExecutor 扩展Spring Repository时,出现错误:
无法解析com.mysema.query.types.Predicate类型。它是从所需的.class文件间接引用的。
有人说它是Eclipse配置问题,但我没有解决问题。
QueryDSL版本为4.1.2,Spring Boot为1.3.5。那么什么是正确的版本?
pom.xml
....
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql-spring</artifactId>
<version>${querydsl.version}</version>
</dependency>
....
<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>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
</dependency>
</dependencies>
</plugin>
答案 0 :(得分:1)
M. Deinum的评论应该是公认的答案。 Spring boot 1.3.5确实依赖于spring-data-jpa 1.9.4,它设置为使用querydsl 3. *,你可以看到它引用了这样的包:
com.mysema.query.types.Predicate
从querydsl 4.0开始,新包都是:
com.querydsl.*
看起来我们需要升级到spring boot 1.4,它基于使用querydsl 4.0的spring-data 1.10
http://docs.spring.io/spring-data/jpa/docs/1.10.2.RELEASE/reference/html/#new-features
答案 1 :(得分:0)
您可以通过添加apt-maven-plugin
分类器来querydsl-apt
使用jpa
中的注释处理器,而不是使用<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<classifier>jpa</classifier>
</dependency>
:
apt-maven-plugin
这样,Maven和IDE(例如IDEA)都可以生成Q类,您无需指定$('img.arrow').click(function() {
$(this).toggleClass('image-active');
});
。
对于Querydsl 4,您需要在dependencyManagement中使用Spring Boot 1.4.0+或覆盖spring-data-commons(1.12.1.RELEASE)和spring-data-jpa(1.10.2.RELEASE)。
答案 2 :(得分:0)
如果您使用的是org.springframework.data.jpa.repository.JpaRepository
,则可以使用:
User user = repository.save(user);
这是来自CrudReporsitory.save()javadoc:
保存给定的实体。使用返回的实例进行进一步操作 因为保存操作可能已完全更改了实体实例。
如果实体不是新实体,则调用merge
。 merge
将其参数的状态复制到具有相同ID的附加实体中,并返回附加的实体。如果实体不是新实体,并且您不使用返回的实体,则您将对分离的实体进行修改。
我猛击头几个小时才能成功
SQLQueryFactory queryFactory = new SQLQueryFactory(configuration, dataSource);
工作,
然后我最后一次撞击它并记得有save
方法。
关于save
here的良好答案。