用二元运算符 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) 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 JPQL 查询中执行更新/删除查询

JPQL 更新查询以更新实体而不使用主键

更新同一张表的 JPQL 查询的性能改进

如何使用 JPQL 创建动态更新查询?

JPQL 到 SQL 使用 Hibernate 更新查询交叉连接问题

用于从 OneToMany 关系中获取不同值的 MySQL 或 JPQL 查询(条件优先级)