2017-07-24 42 views
1

我BDD是PostgreSQL的9.1-901.jdbc4PostgreSQL和通過版本號冬眠訂購1.1.1.1.1

我的ORM的休眠誰帶彈簧的引導工作1.5.1和春季數據REST

我有一個表號碼版本

1.1 
1.3 
1.2.1 
1.3.12.4 
1.5.10.3.5 

我有5個號碼最大。

在我@respositoryRestResource

我試過這個自定義查詢:

@query("select v FROM version v ORDER By cidr(numberVersion)") 
List<Version> findByversionOrderBYNumberVersion(); 

這個自定義查詢的工作方式,直到4號。

我試過其他自定義查詢:

@query("select v FROM version v ORDER BY STRING_TO_ARRAY(numberVersion, '.')::int[] ASC") 
List<Version> findByversionOrderBYNumberVersion(); 

我有一個錯誤:

產生的原因:org.hibernate.hql.internal.ast.QuerySyntaxException:意外的標記:

有人能幫我 ?請我沒有其他想法...

我不能在postgres中創建一個函數。

+2

我不使用像Hibernate這樣的混淆圖層,但'@ query'指示** HQL **查詢?如果你想使用本地Postgres函數,你需要使用** native **查詢,而不是HQL –

+0

*建議:*不要求數據庫或Hibernate進行排序。相反,使用自定義的「比較器」對Java返回的'List'進行排序。 – Andreas

+0

我嘗試使用本機查詢: @query(value =「select v FROM version v ORDER BY STRING_TO_ARRAY(numberVersion,'。'):: int [] ASC」,nativeQuery = true) List findByversionOrderBYNumberVersion(); 我有這個例外: 引起:org.hibernate.QueryException:並非所有命名參數已設置:[:int] 我該如何排除像param? – Viet47

回答

0

我找到了解決辦法...

@query(value = "select * FROM version ORDER BY STRING_TO_ARRAY(numberVersion, '.')\\:\\:int[] ASC", nativeQuery=true) 
List<Version> findByversionOrderBYNumberVersion(); 

感謝您的幫助!