現在のプロジェクトでは、long-matching-prefixタイプのクエリが必要ですが、奇妙なことに、列はbigintとして十分に定義されていました。以下のスニペットで解決策を考え出しました。ここでは、パラメーター?2と?3に一致する列dcで最長の数値を見つけたいと考えています。また、?1の日付は2つの日付列の間にあります。
関連する依存関係は次のとおりです。
- Postresql 8.4
- Hibernate 3.6.10
- Hibernate 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]
問題は、 :intと:int8をパラメーターとして使用するHibernateであると考えていますが、解決策を見つけることができません。
ご協力ありがとうございました。