![](/img/trans.png)
[英]String convert to timestamp in @Query using Spring Data JPA and postgresql
[英]Convert Integer to String in Spring Data JPA Query
我需要优化一个遍历多个对象的查询,并且我希望Spring Data让数据库处理它。 我想以一个类似的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
: 2345_2177
。
我尝试了a.bkey.toString
和''+a.bkey
以及new String(a.bkey)
和只是string(a.bkey)
(最后给出了一个新的异常,但仍然无法正常工作),但是Spring却没有像其中任何一个。 我找不到任何问题要问,看来我不能使用SQLServer的convert()函数,因为这不是SQL。
如何在此@Query中将带下划线的整数连接为字符串?
PS:使用在SQLServer中调试的本机查询会在Hibernate中引发一些奇怪的别名异常,因此我认为“转为本机”已定为死胡同。
如果我理解正确,那么“ Whatever-QL”称为JPQL,并且可以使用运算符CONCAT。 由于它接受两个或多个参数,因此仅使用它取决于您运行的JPA版本。
这是答案。
您可以像这样向您的实体添加吸气剂:
public String getCombinedKey(){
return a.akey + "_" + a.bkey;
}
好处是您可以在这里处理null和其他内容,并且在需要在其他地方使用时可以重用。 如果仅在存储库中执行此操作,则每次都必须复制它。
您的查询将是:
@Query("SELECT new map (a.combinedKey, a.akey) FROM mergeTable a WHERE a.discr= ?1")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.