具有自定义变量的Spring自定义@Query

时间:2019-05-09 13:44:08

标签: java spring spring-data-jpa

我有一个映射到自定义对象的查询:

@Query("SELECT new com.mypackage.CmcXml(c.nom, c.prenom, c.genre "+
                "FROM Cmc c")
List<CmcXml> getExportCmc();

所以我得到了这样的结果:

{"NOM1", "PRENOM1", "GENRE1"},
{"NOM2", "PRENOM2", "GENRE2"},
{"NOM3", "PRENOM3", "GENRE3"}

我希望有一个在获取数据时递增的计数器:

@Query("SELECT new com.mypackage.CmcXml(myCounter, c.nom, c.prenom, c.genre "+
                "FROM Cmc c")
List<CmcXml> getExportCmc();

我想要的结果:

{1, "NOM1", "PRENOM1", "GENRE1"},
{2, "NOM2", "PRENOM2", "GENRE2"},
{3, "NOM3", "PRENOM3", "GENRE3"}

是否可以在@Query中执行此操作,还是必须在请求后浏览所有列表?

2 个答案:

答案 0 :(得分:1)

否,jpa / hibernate中不支持行号。您必须使用本机查询。

答案 1 :(得分:0)

这在JPA中是不可能的,因为JPA对实体起作用,并且实体又映射到数据库中的表。行号与结果集相对应,实际上不在数据库表中。

您可以尝试以下操作,具体取决于您的数据库。

SELECT @rownumber\\:=@rownumber+1 as rownumber, column From Table

或者正如JB Nizet在评论中建议的那样,您可以使用自己的逻辑将这些对象映射到带有计数器的对象。