我有个本地人 Mysql
查询
select tl_id,c_name,m_name,u_first_name,t_name,
tl_logged_at,tl_minutes,tl_description
from users inner join clients on u_id=c_frn_owner_id
inner join matters on m_frn_client_id = c_id
inner join tasks on t_frn_matter_id = m_id
inner join task_logs on tl_frn_task_id = t_id
where c_id =2 and m_id=4 and t_id= 3 and u_id = 4
我可以为之写作 JPQL
而不是本机查询。但是如何使用 JPA Specification
,因为 where
条件 c_id
, m_id
, t_id
以及 u_id
是可选的。它们是提供给用户的过滤器选项。
本机查询的生成可以使用 if
条件。但他们很容易打字和 SQL Injections
.
文件 JPASpecification
没有与连接多个表相关的信息。
spring官方jpa规范文档
我是新来的 JPASpecification
所以任何指导都是有价值的。
2条答案
按热度按时间yzckvree1#
jpa2引入了一个criteriaapi,您可以使用它以编程方式构建查询。
如果您使用jpa2并且希望创建动态查询,我认为您应该查看criteriaapi来构建动态查询。或者您可以使用jpaspecificationexecutor(我还没有尝试过)。
附带一些有用的链接:
jpa规范
jpa标准api
zour9fqk2#
看看querydsl项目,我在一个中型erp中广泛使用它,直到现在都没有失望。
http://www.querydsl.com/static/querydsl/latest/reference/html/
for dynamic where子句:可以使用
com.querydsl.core.BooleanBuilder
因此,当querydsl就绪时,可以首先生成where子句,如下所示。然后您可以像下面这样编写查询。