在我们当前的项目中,我们需要一个长匹配前缀类型的查询,但奇怪的是,该列被定义为bigint。我们在下面的代码片段中提出了解决方案,我们希望在dc列中找到与参数?2和?3匹配的最长数字,并且?1日期在 2 个日期列之间。
以下是相关的依赖项:
- Postresql 8.4
- 休眠 3.6.10
- 休眠 JPA 1.0.1
- 春天 3.2.1
这是来源:
...
String query_string = "SELECT * FROM numberlist WHERE " +
"?1 BETWEEN init_date AND COALESCE(end_date,'2999-12-31') " +
"AND dc IN " +
"(select ?2/(10^i)::int8 from generate_series(0,floor(log(?3))::int) i) " +
"ORDER BY dc DESC LIMIT 1";
Query query = emf.createEntityManager().createNativeQuery(query_string, MyNumber.class);
query.setParameter(1, valid_date);
query.setParameter(2, num);
query.setParameter(3, num);
MyNumber result = (MyNumber)query.getSingleResult();
...
我们得到以下异常:
Caused by: org.hibernate.QueryException: Not all named parameters have been set: [:int8, :int]
我们认为问题在于 Hibernate 将:int和:int8作为参数但找不到解决方案。
谢谢您的帮助。