如何使用JPA查询更新单个表单

阿瑟·德克尔

我需要帮助。我正在更新数据库中的一个字段,但我不太擅长使用 JPA 查询。不过我还在学习。

@Entity
public class CertificateProgramme {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @NotNull(message = "The above field must not be blank.")
        @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
                +"[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
                +"(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?",
                message="Please enter a valid email address")
        private String email;

        private boolean flag;

我想将标志字段更新为 false。当我在 serviceImpl 类中使用 save 方法时,我能够进行更新,但是当我在没有保存的情况下尝试时它不起作用。

(CertificateProgramme certificateProgramme)在ServiceImpl中定义了要实现的服务接口中的方法unFlagger

public interface CertificateService {
    List<CertificateProgramme> findAll();
    CertificateProgramme ListAll();
    CertificateProgramme findOne(Long id);
    void save(CertificateProgramme certificateProgramme);
    CertificateProgramme flagger(CertificateProgramme certificateProgramme);
    CertificateProgramme unFlagger(CertificateProgramme certificateProgramme);
}

服务实现程序

 @Override
public CertificateProgramme flag(CertificateProgramme certificateProgramme) {
    certificateDao.unFlagger(certificateProgramme);
    return certificateProgramme;
}

道.java

@Repository
public interface CertificateDao extends CrudRepository<CertificateProgramme, Long> {
    @Query("select t from CertificateProgramme t where t.user.id=?#{principal.id}")
    List<CertificateProgramme> findAll();
    @Query("select t from CertificateProgramme t where t.user.id=?#{principal.id}")
    CertificateProgramme ListAll();

我需要帮助

@Modifying
@Query("update CertificateProgramme ear set ear.flag = ?#{'FALSE'} where ear.user.id=?#{principal.id}")
CertificateProgramme unFlagger(CertificateProgramme flag);

控制器

这应该更新标志字段,但它没有更新。我宁愿得到一个错误。

@RequestMapping(value = "cert_prog/{certId}", method = RequestMethod.POST)
    public String UpdateFlag(@PathVariable Long certId, CertificateProgramme certificateProgramme){
        certificateService.unFlagger(certificateProgramme);
        return String.format("redirect:/cert_prog/%s/edit", certId);
    }

错误

    2017-02-25 21:40:28.257 ERROR 20769 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query] with root cause

javax.persistence.TransactionRequiredException: Executing an update/delete query
    at org.hibernate.jpa.spi.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:71) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final]
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$ModifyingExecution.doExecute(JpaQueryExecution.java:238) ~[spring-data-jpa-1.9.2.RELEASE.jar:na]
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:78) ~[spring-data-jpa-1.9.2.RELEASE.jar:na]
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:100) ~[spring-data-jpa-1.9.2.RELEASE.jar:na]
    at or
雅库布Ch。

你应该修复你的 dao 方法。如果您希望查询修改不同实体的一个字段,则仅将该字段值和实体 id 作为参数传递给方法(或者甚至仅 id,如果您希望您的方法始终将标志设置为 false)。然后在查询中以正确的 JPQL 格式引用它们。这种情况的例子可以在spring 数据 JPA 文档中找到

在您的情况下,它应该如下所示:

证书DAO.java

@Modifying
@Query("update CertificateProgramme ear set ear.flag = FALSE where ear.id = ?1")
int unFlagger(Long id);

服务实现程序

@Override
public CertificateProgramme flag(CertificateProgramme certificateProgramme) {
    certificateDao.unFlagger(certificateProgramme.getId());
    return findOne(certificateProgramme.getId());
}

这个应该有效。您可能还可以摆脱将 CertificateProgramme 传递给服务并仅传递 id 的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用spring数据jpa更新单个字段

来自分类Dev

在Oracle DBMS中使用单个SQL查询更新许多行

来自分类Dev

如何使用单个where子句更新多行

来自分类Dev

如何使用节点从查询表单中查询mongodb并表达

来自分类Dev

如何在单个查询中使用联接和聚合函数更新表中的多行

来自分类Dev

如何使用python中的单个MySQL查询更新多行?

来自分类Dev

如何使用动态参数创建JPA查询?

来自分类Dev

单个Postgres查询使用本地哈希/数组更新许多记录

来自分类Dev

如何使用jpa查询嵌套对象

来自分类Dev

如何使用单个查询在SQL Server 2008中创建和更新视图

来自分类Dev

如何在单个sql查询中使用条件更新多列

来自分类Dev

Vuejs-如何使用单个表单添加和编辑

来自分类Dev

如何使用单个表格更新多个模型

来自分类Dev

使用IF条件时,如何在django中的单个查询中更新数据库?

来自分类Dev

如何使用aurelia商店更新单个组件?

来自分类Dev

如何使用单个查询获取最后更新的行

来自分类Dev

如何使用Django表单或ModelForm更新数据库表记录子集中的单个列?

来自分类Dev

使用单个查询更新SQL

来自分类Dev

使用单个查询更新多个记录以提高性能

来自分类Dev

如何使用单个更新查询交换表中的列值

来自分类Dev

如何使用节点从查询表单中查询mongodb并表达

来自分类Dev

如何在单个查询中使用联接和聚合函数更新表中的多行

来自分类Dev

使用联接查询更新单个列

来自分类Dev

如何使用单个查询查询多个表?

来自分类Dev

如何使用VBA在Access中关闭单个表单实例?

来自分类Dev

如何使用 AngularJS 处理单个页面中存在的多个表单

来自分类Dev

如何在同一存储过程中对单个表使用多个更新查询

来自分类Dev

如何使用 Django 表单查询数据?

来自分类Dev

如何使用 RESTHeart 补丁更新单个对象?

Related 相关文章

  1. 1

    使用spring数据jpa更新单个字段

  2. 2

    在Oracle DBMS中使用单个SQL查询更新许多行

  3. 3

    如何使用单个where子句更新多行

  4. 4

    如何使用节点从查询表单中查询mongodb并表达

  5. 5

    如何在单个查询中使用联接和聚合函数更新表中的多行

  6. 6

    如何使用python中的单个MySQL查询更新多行?

  7. 7

    如何使用动态参数创建JPA查询?

  8. 8

    单个Postgres查询使用本地哈希/数组更新许多记录

  9. 9

    如何使用jpa查询嵌套对象

  10. 10

    如何使用单个查询在SQL Server 2008中创建和更新视图

  11. 11

    如何在单个sql查询中使用条件更新多列

  12. 12

    Vuejs-如何使用单个表单添加和编辑

  13. 13

    如何使用单个表格更新多个模型

  14. 14

    使用IF条件时,如何在django中的单个查询中更新数据库?

  15. 15

    如何使用aurelia商店更新单个组件?

  16. 16

    如何使用单个查询获取最后更新的行

  17. 17

    如何使用Django表单或ModelForm更新数据库表记录子集中的单个列?

  18. 18

    使用单个查询更新SQL

  19. 19

    使用单个查询更新多个记录以提高性能

  20. 20

    如何使用单个更新查询交换表中的列值

  21. 21

    如何使用节点从查询表单中查询mongodb并表达

  22. 22

    如何在单个查询中使用联接和聚合函数更新表中的多行

  23. 23

    使用联接查询更新单个列

  24. 24

    如何使用单个查询查询多个表?

  25. 25

    如何使用VBA在Access中关闭单个表单实例?

  26. 26

    如何使用 AngularJS 处理单个页面中存在的多个表单

  27. 27

    如何在同一存储过程中对单个表使用多个更新查询

  28. 28

    如何使用 Django 表单查询数据?

  29. 29

    如何使用 RESTHeart 补丁更新单个对象?

热门标签

归档