我正在尝试让这个查询在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);
在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静态查询示例