用二元运算符 mysql 查询更新列的 JPQL jpa (@Query) 是啥?
Posted
技术标签:
【中文标题】用二元运算符 mysql 查询更新列的 JPQL jpa (@Query) 是啥?【英文标题】:what it the JPQL jpa (@Query) for update column with binary operator mysql query?用二元运算符 mysql 查询更新列的 JPQL jpa (@Query) 是什么? 【发布时间】:2019-01-29 16:10:03 【问题描述】:SQL 查询:
update de_meta set service_lines = service_lines | 5 where de_id = 20;
这在 SQL 控制台上运行良好。
JPA 查询:
@Modifying
@Query("update DeMetaEntity set serviceLines = serviceLines | ?2 where deId = ?1")
void addDeServiceLineMap(Integer deId, int serviceLine);
此 JPA 查询引发错误,因为 | (按位或)在 JPQL 中无效。 有没有办法为给定的 SQL 查询编写等效的 JPQL?
我不想使用条件查询。当我在 JAVA INTERFACE 使用它时。
【问题讨论】:
将其指定为原生查询。 docs.spring.io/spring-data/data-jpa/docs/current/api/… 我想将其用作单一更新查询而不先执行选择。不知道你是怎么求婚的? ?????? @Query("更新 DeMetaEntity 设置 serviceLines = serviceLines | ?2 where deId = ?1", nativeQuery = true) 【参考方案1】:按照 Alan 的建议创建本机查询:
@Modifying
@Query("update de_meta set service_lines = service_lines | ?2 where de_id = ?1", nativeQuery=true)
void addDeServiceLineMap(Integer deId, int serviceLine);
开关 nativeQuery=true 将按原样执行 SQL 查询。
【讨论】:
好的,你想解决什么问题?为什么要编写查询而不是修改内存中的实体并将其持久化? 我不想阅读 service_line,更改并坚持。相反,我想直接对 service_lines 列执行二进制操作而不读取值。以上是关于用二元运算符 mysql 查询更新列的 JPQL jpa (@Query) 是啥?的主要内容,如果未能解决你的问题,请参考以下文章