当前位置: 首页 > 知识库问答 >
问题:

JPA和JSON操作符本机更新查询

巫马盛
2023-03-14

我正在尝试让这个查询在JPA中工作:

UPDATE billing_log_criteria
SET value = jsonb_set(value, '{cubPersonId}', '"12778269"')
where value ->> 'cubPersonId' = '12778268';

它与postgresql一起完美地工作,但是当我将它与JPA集成时,我得到了以下错误:

@Modifying(clearAutomatically=false)
@Transactional
@Query(value = "UPDATE billing_log_criteria "
        + "SET value = jsonb_set(value, '{cubPersonId}',  jsonb_set(value, '{cubPersonId}', :newId)) "
        + "where value ->> 'cubPersonId' = :oldId", nativeQuery = true)
void updateCubPersonId(@Param("newId") String newId,@Param("oldId") String oldId);

像这样打电话

String oldId = "12778269";
updateCubPersonId( "'\" 12778268l \"'",oldId);

共有1个答案

闻枫
2023-03-14

PSQL中,参数“{cubPersonId}”自动转换为文本[]。在JDBC中,情况并非如此,您需要显式地执行,例如:

@Query(value = "UPDATE billing_log_criteria "
        + "SET value = jsonb_set(value, '{cubPersonId}'::text[],  jsonb_set(value, '{cubPersonId}'::text[], to_jsonb(:newId::text))) "
        + "where value ->> 'cubPersonId' = :oldId", nativeQuery = true)
 类似资料:
  • 当使用jpa本机查询 事务传播是我们正在使用的正确jpa的唯一特性吗? 在我的意见中,我就像使用普通的旧jdbc pluc jpa事务传播 我正在阅读PRO JPA一书,根据我的理解 当我们使用JPA本机查询获取一组标量值时(与我们使用jdbc的方式很相似),实际上没有托管实体和持久性上下文的概念。当我们通过本机查询检索实体时,情况会发生变化。

  • 这以前被问过一次,但解决方案并没有解决问题。我正在创建一个JUnit测试: 上述测试调用的查询是: 错误:

  • 我在springdatajpa中执行更新查询时遇到问题。这是存储库层中的代码: 如您所见,我已经添加了@修改注释,但它仍然抛出“不支持DML操作”的错误,我正在使用Hibernate 5.4。非常感谢任何帮助。

  • 问题内容: JPA()中的本机查询是否支持缓存? 我正在填写自己的数据传输对象,因为sql查询会联接多个表,并且仅从表中获取几个列。 问候 问题答案: 这是可能的,但 您必须使用显式或。 也可以看看 缓存SQL查询问题 hibernate:真正了解二级和查询缓存

  • 我正在尝试更新我的jpa存储库 这是我控制器的一部分: 服务器还说: SQL错误:0,SqlState:S1009 2017-06-18 12:51:15.778错误10388---[nio-8080-exec-4]O.H.Engine.jdbc.spi.SQLExCeptionHelper:无法使用executeQuery()发出数据操作语句。2017-06-18 12:51:15.844错误1

  • 主要内容:JPQL动态查询示例,JPQL静态查询示例JPQL允许我们创建静态和动态查询。 现在,我们将在下表中使用这两种查询来执行一些基本的JPQL操作。 JPQL动态查询示例 在这个例子中,我们将使用方法从数据库中获取单个列的值。 完整的目录结构如下 - 文件:StudentEntity.java - 配置文件:Persistence.xml - 文件:FetchColumn.java - 执行上面示例代码,得到以下结果 - JPQL静态查询示例