JPA查询与更改where子句

时间:2014-02-01 10:22:47

标签: jpa

我有一些具有多个字段的实体。我的客户希望通过变量where子句获得一些选择。

例如,第一次可能是

"where name='John' and id_version=5"

然后 name 字段可能根本没有使用

"where id_version=5"

或者可能会添加一些新字段

"where id_version=5 and sex='male'"

使用JPA和Spring存储库实现它的最佳实践是什么?

2 个答案:

答案 0 :(得分:1)

在JPA中编写动态查询没有一个最佳实践。但大多数最佳实践将使用JPA Criteria API或替代方案(如Querydsl)。

如果您没有一些不寻常的要求,那么使用字符串连接动态生成JPQL查询不是最佳做法(尤其是在使用字符串连接而不是使用索引或命名参数的查询中插入参数时)。

由于您使用的是Spring,Spring Data JPA是一个很棒的库来创建JPA存储库。它可以与JPA Criteria API或Querydsl一起使用。如果您只需要为单个实体编写动态查询,则可能有点复杂,但是当您对许多实体有此要求时它会变得非常有用。

答案 1 :(得分:1)

Spring Data和Querydsl将是这种情况的一个很好的匹配。使用Querydsl增强型存储库,您可以像这样表达过滤器

repository.findAll(entity.name.eq("John").and(entity.idVersion.eq(5)))

repository.findAll(entity.idVersion.eq(5))

repository.findAll(entity.idVersion.eq(5).and(entity.sex.eq("male")))

这里还有一个相关的博文http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

这个答案是有偏见的,因为我参与了Querydsl项目。