我需要由hibernate处理以下查询。
select * from
(select ROWNUM rnum,
fullData.* from
(select count(*) over () as rowcnt,
origQry.*
from (select emp_id, name, role from employee
where
1 = 1
AND
emp_id =?
AND
name = ?
AND
role = ?
order by emp_id asc) origQry
) fullData where rownum <= ?
) where rnum > ?;我可以用hibernate原生sql参数化查询语言做到这一点。例如:
SQLQuery sqlQuery = session.createSQLQuery("select * from (select ROWNUM rnum,fullData.* from (select count(*) over () as rowcnt,origQry.* from (select emp_id, name, role from employee where 1 = 1 AND emp_id =? AND name = ? AND role = ? order by emp_id asc) origQry) fullData where rownum <= ?) where rnum > ?");
sqlQuery.setParameter(1,someValye);
sqlQuery.setParameter(2,someValye);
sqlQuery.setParameter(3,someValye);
sqlQuery.setParameter(4,someValye);
sqlQuery.setParameter(5,someValye);但问题是,在origQry where claue中并不总是需要添加所有这三个属性(emp_id、name、role)。每当这些属性的值来自用户输入时,只有它应该被添加到origQry where calues中。
如果可以使用本机查询语言之外的任何其他方法,我也可以使用它。请建议一些解决方案。提前谢谢。
发布于 2019-08-14 05:33:19
如果您实际使用的是JPA (而不是Hibernate专有注释),则可以创建一个dynamic query并构建WHERE标准,就像在this answer中一样。
https://stackoverflow.com/questions/57484794
复制相似问题