在 Spring 数据 JPA 查询中将整数转换为字符串
Convert Integer to String in Spring Data JPA Query
我需要优化一个遍历多个对象的查询,我想要 Spring 数据让数据库处理它。我想得到一个看起来像
的 HashMap<String,String>
2134_9877, 9877
2134_2344, 2344
3298_9437, 9437
SQL 将是 select convert(varchar,b.id)+'_'+convert(varchar,a.id)',a.id from t1 a join t2 b on a.jc = b.jc
到目前为止,我在存储库中得到了 Whatever-QL,如下所示:
@Query("SELECT new map (a.bkey, a.akey) FROM mergeTable a WHERE a.discr= ?1")
问题是,bkey
不是唯一的,它只有在与 akey
配对时才是唯一的,而我必须喂它的怪物希望它们与下划线组合:2345_2177
.
我已经尝试了 a.bkey.toString
和 ''+a.bkey
以及 new String(a.bkey)
和 string(a.bkey)
(最后一个给出了一个新的异常但仍然不起作用)但是 Spring 不喜欢这些。我找不到任何问题问这个而且我似乎不能使用 SQLServer 的 convert() 函数因为这不是 SQL.
如何在此 @Query 中将整数作为字符串与下划线连接起来?
PS:使用已在 SQLServer 中调试的本机查询会在 Hibernate 中抛出一些奇怪的别名异常,因此我认为 'going native' 注定是一个死胡同。
如果我没理解错的话,'Whatever-QL'就叫做JPQL,可以使用运算符CONCAT。仅使用它,因为它接受两个或更多参数取决于您使用的 JPA 版本 运行.
答案在这里。
JPA concat operator
您可以像这样向您的实体添加 getter:
public String getCombinedKey(){
return a.akey + "_" + a.bkey;
}
优点是您可以在此处处理 null 和其他需要的东西,并且如果您在其他地方需要它,它的可重用性更高。如果您只在存储库中执行此操作,则每次都必须复制它。
您的查询将是:
@Query("SELECT new map (a.combinedKey, a.akey) FROM mergeTable a WHERE a.discr= ?1")
我需要优化一个遍历多个对象的查询,我想要 Spring 数据让数据库处理它。我想得到一个看起来像
的HashMap<String,String>
2134_9877, 9877
2134_2344, 2344
3298_9437, 9437
SQL 将是 select convert(varchar,b.id)+'_'+convert(varchar,a.id)',a.id from t1 a join t2 b on a.jc = b.jc
到目前为止,我在存储库中得到了 Whatever-QL,如下所示:
@Query("SELECT new map (a.bkey, a.akey) FROM mergeTable a WHERE a.discr= ?1")
问题是,bkey
不是唯一的,它只有在与 akey
配对时才是唯一的,而我必须喂它的怪物希望它们与下划线组合:2345_2177
.
我已经尝试了 a.bkey.toString
和 ''+a.bkey
以及 new String(a.bkey)
和 string(a.bkey)
(最后一个给出了一个新的异常但仍然不起作用)但是 Spring 不喜欢这些。我找不到任何问题问这个而且我似乎不能使用 SQLServer 的 convert() 函数因为这不是 SQL.
如何在此 @Query 中将整数作为字符串与下划线连接起来?
PS:使用已在 SQLServer 中调试的本机查询会在 Hibernate 中抛出一些奇怪的别名异常,因此我认为 'going native' 注定是一个死胡同。
如果我没理解错的话,'Whatever-QL'就叫做JPQL,可以使用运算符CONCAT。仅使用它,因为它接受两个或更多参数取决于您使用的 JPA 版本 运行.
答案在这里。
JPA concat operator
您可以像这样向您的实体添加 getter:
public String getCombinedKey(){
return a.akey + "_" + a.bkey;
}
优点是您可以在此处处理 null 和其他需要的东西,并且如果您在其他地方需要它,它的可重用性更高。如果您只在存储库中执行此操作,则每次都必须复制它。
您的查询将是:
@Query("SELECT new map (a.combinedKey, a.akey) FROM mergeTable a WHERE a.discr= ?1")