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

使用@Query和hibernate更新spring数据jpa中的布尔值

祝灼光
2023-03-14

我已经配置并运行了spring数据和hibernate。我可以使用spring数据保存记录,但由于某些原因,我无法运行将更新表中所有布尔字段的查询。

我试过这个:

@Query("update Content v set v.published = false where v.division = :division and v.section = :section")
void unPublishContent(@Param("division") String division, 
                         @Param("section") String section);

我也试过:

 @Query("update Content v set v.published = 0 where v.division = :division and v.section = :section")
void unPublishContent(@Param("division") String division, 
                         @Param("section") String section);

参数的划分和部分正在实现,但表上没有变化。

p、 我也在使用mysql数据库。

共有3个答案

糜正业
2023-03-14

对我来说,它也适用于以下注释:

@Modifying
@Query("update User u set u.active=1 where a.id=?1")
@Transactional
void  activeUser(Long id);
张积厚
2023-03-14

要执行修改查询,您需要使用参考文档中概述的附加@modifying注释该方法,如下所示:

@Modifying
@Query("update Content v set v.published = false where v.division = :division and v.section = :section")
void unPublishContent(@Param("division") String division, 
                     @Param("section") String section);
李联
2023-03-14

我使用的是Spring3.1和SpringJPA数据。我也有类似的问题。在一个查询中更新多个记录时,我经常遇到错误。

所以,我有这样的东西。

@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);

错误:

org.hibernate.hql.QueryExecutionRequestException: Not supported for DML operations

所以,在谷歌搜索了一段时间后,我发现你必须添加@Modifying。

@Modifying  
@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);

但后来我发现了以下错误:

...    
nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; 
nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
...

所以,我认为我的问题现在是一个事务问题,我回到谷歌去研究它,发现你必须现在添加@Transactional。似乎@Modifying还需要@Transactional。

@Modifying  
@Transactional
@Query("UPDATE User u SET u.state = ?1 WHERE u.server.id = ?2")
public void updateAllUsers(long state, long serverid);

但是我得到了以下错误:

No value for key [org.apache.commons.dbcp.BasicDataSource (...) ] bound to thread

我又谷歌了一会儿,得出结论,我的配置是错误的,结果是真的。我错过了一些xml配置。

<beans:bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
    <beans:property name="entityManagerFactory" ref="entityManagerFactory"/>
</beans:bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

这是一次长途旅行,但我最终还是成功了。我希望这能帮助一些人,像其他人在他们精彩的博客、答案和评论中帮助我一样,努力“向前支付”。

 类似资料:
  • 问题内容: 我已配置并运行spring-data和hibernate。我可以使用spring- data保存记录,但是由于某些原因,我无法运行查询来更新表中的所有布尔字段。 我尝试了这个: 我也试过这个: 参数除法和节将实现,但表上未更改。 PS我也正在使用MySQL数据库。 问题答案: 我正在使用Spring 3.1和Spring JPA数据。我有一个类似的问题。尝试在1个查询中更新多个记录时,

  • 为了测试@version注释,我使用以下设置来管理持久性: Spring Boot Starter 1.5.3.发布 Hibernate5.2.10.final Spring Data Envers 1.1.3.Release->Spring Data JPA 1.11.3.Release 测试的数据库: H2 PostgreSQL Mariadb 甲骨文 实体正在使用一个@version注释字段

  • 和 和 我的存储库:

  • 我有一些实体类,其id配置如下 接下来是我的问题。例如,第一天,我获取所有记录并保存它们。但是第二天我会再次得到所有的记录,包括第一天已经保存的记录。当我试着拯救第二天的时候会发生什么?是所有记录都将再次插入还是Spring数据只插入新记录,从第一天开始的旧记录将被更新?我需要第二种情况下的行为

  • 问题内容: 是否可以使用Spring Data JPA(由Hibernate作为JPA提供者支持)并同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,无法使用检索当前会话。当我切换到HibernateTransaction Manager时,JPA存储库无法提交更改。 这是我的Spring上下文的一部分(在该上下文中,我无法使用直接的Hibernate

  • 我有一个更新查询: 我试图在集成测试中使用它: 但日志中没有显示与查找器相关的sql: 是否由于某些缓存原因而被忽略? 然后,如果我向findByEmail和findByLogin查找器添加一个调用,如下所示: 另一件让我困惑的事情是它显示了一个Limit2子句,尽管它应该只返回一个Admin对象。 我以为返回一个域对象时总会有一个限制1。这是对Spring数据的错误假设吗? 当粘贴到MySQL客