2017-07-24 43 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(); 

感谢您的帮助!