<tfoot id='RVbKX'></tfoot>

  1. <small id='RVbKX'></small><noframes id='RVbKX'>

    <legend id='RVbKX'><style id='RVbKX'><dir id='RVbKX'><q id='RVbKX'></q></dir></style></legend>
      <bdo id='RVbKX'></bdo><ul id='RVbKX'></ul>
  2. <i id='RVbKX'><tr id='RVbKX'><dt id='RVbKX'><q id='RVbKX'><span id='RVbKX'><b id='RVbKX'><form id='RVbKX'><ins id='RVbKX'></ins><ul id='RVbKX'></ul><sub id='RVbKX'></sub></form><legend id='RVbKX'></legend><bdo id='RVbKX'><pre id='RVbKX'><center id='RVbKX'></center></pre></bdo></b><th id='RVbKX'></th></span></q></dt></tr></i><div id='RVbKX'><tfoot id='RVbKX'></tfoot><dl id='RVbKX'><fieldset id='RVbKX'></fieldset></dl></div>

      Spring Data JPA Update @Query 没有更新?

      Spring Data JPA Update @Query not updating?(Spring Data JPA Update @Query 没有更新?)
      <tfoot id='0p0MR'></tfoot>
        <bdo id='0p0MR'></bdo><ul id='0p0MR'></ul>
              <tbody id='0p0MR'></tbody>

              <i id='0p0MR'><tr id='0p0MR'><dt id='0p0MR'><q id='0p0MR'><span id='0p0MR'><b id='0p0MR'><form id='0p0MR'><ins id='0p0MR'></ins><ul id='0p0MR'></ul><sub id='0p0MR'></sub></form><legend id='0p0MR'></legend><bdo id='0p0MR'><pre id='0p0MR'><center id='0p0MR'></center></pre></bdo></b><th id='0p0MR'></th></span></q></dt></tr></i><div id='0p0MR'><tfoot id='0p0MR'></tfoot><dl id='0p0MR'><fieldset id='0p0MR'></fieldset></dl></div>

                <small id='0p0MR'></small><noframes id='0p0MR'>

                <legend id='0p0MR'><style id='0p0MR'><dir id='0p0MR'><q id='0p0MR'></q></dir></style></legend>

                本文介绍了Spring Data JPA Update @Query 没有更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我有一个更新查询:

                @Modifying
                @Transactional
                @Query("UPDATE Admin SET firstname = :firstname, lastname = :lastname, login = :login, superAdmin = :superAdmin, preferenceAdmin = :preferenceAdmin, address =  :address, zipCode = :zipCode, city = :city, country = :country, email = :email, profile = :profile, postLoginUrl = :postLoginUrl WHERE id = :id")
                public void update(@Param("firstname") String firstname, @Param("lastname") String lastname, @Param("login") String login, @Param("superAdmin") boolean superAdmin, @Param("preferenceAdmin") boolean preferenceAdmin, @Param("address") String address, @Param("zipCode") String zipCode, @Param("city") String city, @Param("country") String country, @Param("email") String email, @Param("profile") String profile, @Param("postLoginUrl") String postLoginUrl, @Param("id") Long id);
                

                我正在尝试在集成测试中使用它:

                I'm trying to use it in an integration test:

                adminRepository.update("Toto", "LeHeros", admin0.getLogin(), admin0.getSuperAdmin(), admin0.getPreferenceAdmin(), admin0.getAddress(), admin0.getZipCode(), admin0.getCity(), admin0.getCountry(), admin0.getEmail(), admin0.getProfile(), admin0.getPostLoginUrl(), admin0.getId());
                Admin loadedAdmin = adminRepository.findOne(admin0.getId());
                assertEquals("Toto", loadedAdmin.getFirstname());
                assertEquals("LeHeros", loadedAdmin.getLastname());
                

                但是这些字段没有更新并保留它们的初始值,因此测试失败.

                But the fields are not updated and retain their initial values, the test thus failing.

                我尝试在 findOne 查询之前添加一个刷新:

                I tried adding a flush right before the findOne query:

                adminRepository.flush();
                

                但失败的断言保持不变.

                But the failed assertion remained identical.

                在日志中可以看到更新sql语句:

                I can see the update sql statement in the log:

                update admin set firstname='Toto', lastname='LeHeros', login='stephane', super_admin=0, preference_admin=0,
                address=NULL, zip_code=NULL, city=NULL, country=NULL, email='stephane@thalasoft.com', profile=NULL,
                post_login_url=NULL where id=2839
                

                但日志显示没有可能与查找器相关的 sql:

                But the log shows no sql that could relate to the finder:

                Admin loadedAdmin = adminRepository.findOne(admin0.getId());
                The finder sql statement is not making its way to the database.
                

                是否因为某些缓存原因而被忽略?

                Is it ignored for some caching reason ?

                如果我随后添加对 findByEmail 和 findByLogin 查找器的调用,如下所示:

                If I then add a call to the findByEmail and findByLogin finders as in:

                adminRepository.update("Toto", "LeHeros", "qwerty", admin0.getSuperAdmin(), admin0.getPreferenceAdmin(), admin0.getAddress(), admin0.getZipCode(), admin0.getCity(), admin0.getCountry(), admin0.getEmail(), admin0.getProfile(), admin0.getPostLoginUrl(), admin0.getId());
                Admin loadedAdmin = adminRepository.findOne(admin0.getId());
                Admin myadmin = adminRepository.findByEmail(admin0.getEmail());
                Admin anadmin = adminRepository.findByLogin("qwerty");
                assertEquals("Toto", anadmin.getFirstname());
                assertEquals("Toto", myadmin.getFirstname());
                assertEquals("Toto", loadedAdmin.getFirstname());
                assertEquals("LeHeros", loadedAdmin.getLastname());
                

                然后我可以在日志中看到正在生成的 sql 语句:

                then I can see in the log the sql statement being generated:

                但是断言:

                assertEquals("Toto", myadmin.getFirstname());
                

                即使跟踪显示检索到相同的域对象,仍然失败:

                still fails even though the trace shows the same domain object was retrieved:

                TRACE [BasicExtractor] found [1037] as column [id14_]
                

                另一个 finder 让我感到困惑的另一件事是,它显示了一个限制 2 子句,即使它应该只返回一个 Admin 对象.

                One other thing that puzzles me with this other finder is that it shows a limit 2 clause even though it is supposed to return only one Admin object.

                我认为返回一个域对象时总会有一个限制 1.这是对 Spring Data 的错误假设吗?

                I thought there would always be a limit 1 when returning one domain object. Is this a wrong assumption on Spring Data ?

                在 MySQL 客户端中粘贴时,控制台日志中显示的 sql 语句,逻辑工作正常:

                When pasting in a MySQL client, the sql statements displayed in the console log, the logic works fine:

                mysql> insert into admin (version, address, city, country, email, firstname, lastname, login, password, 
                -> password_salt, post_login_url, preference_admin, profile, super_admin, zip_code) values (0,
                -> NULL, NULL, NULL, 'zemail@thalasoft.com039', 'zfirstname039', 'zlastname039', 'zlogin039',
                -> 'zpassword039', '', NULL, 0, NULL, 1, NULL);
                Query OK, 1 row affected (0.07 sec)
                
                mysql> select * from admin;
                +------+---------+---------------+--------------+-----------+--------------+---------------+-------------+------------------+---------+----------+------+---------+-------------------------+---------+----------------+
                | id | version | firstname | lastname | login | password | password_salt | super_admin | preference_admin | address | zip_code | city | country | email | profile | post_login_url |
                +------+---------+---------------+--------------+-----------+--------------+---------------+-------------+------------------+---------+----------+------+---------+-------------------------+---------+----------------+
                | 1807 | 0 | zfirstname039 | zlastname039 | zlogin039 | zpassword039 | | 1 | 0 | NULL | NULL | NULL | NULL | zemail@thalasoft.com039 | NULL | NULL | 
                +------+---------+---------------+--------------+-----------+--------------+---------------+-------------+------------------+---------+----------+------+---------+-------------------------+---------+----------------+
                1 row in set (0.00 sec)
                
                mysql> update admin set firstname='Toto', lastname='LeHeros', login='qwerty', super_admin=0, preference_admin=0, address=NULL, zip_code=NULL, city=NULL, country=NULL, email='stephane@thalasoft.com', profile=NULL, post_login_url=NULL where id=1807;
                Query OK, 1 row affected (0.07 sec)
                Rows matched: 1 Changed: 1 Warnings: 0
                
                mysql> select * from admin; +------+---------+-----------+----------+--------+--------------+---------------+-------------+------------------+---------+----------+------+---------+------------------------+---------+----------------+
                | id | version | firstname | lastname | login | password | password_salt | super_admin | preference_admin | address | zip_code | city | country | email | profile | post_login_url |
                +------+---------+-----------+----------+--------+--------------+---------------+-------------+------------------+---------+----------+------+---------+------------------------+---------+----------------+
                | 1807 | 0 | Toto | LeHeros | qwerty | zpassword039 | | 0 | 0 | NULL | NULL | NULL | NULL | stephane@thalasoft.com | NULL | NULL | 
                +------+---------+-----------+----------+--------+--------------+---------------+-------------+------------------+---------+----------+------+---------+------------------------+---------+----------------+
                1 row in set (0.00 sec)
                
                mysql> select admin0_.id as id14_, admin0_.version as version14_, admin0_.address as address14_, admin0_.city as city14_, admin0_.country as country14_, admin0_.email as email14_, admin0_.firstname as firstname14_, admin0_.lastname as lastname14_, admin0_.login as login14_, admin0_.password as password14_, admin0_.password_salt as password11_14_, admin0_.post_login_url as post12_14_, admin0_.preference_admin as preference13_14_, admin0_.profile as profile14_, admin0_.super_admin as super15_14_, admin0_.zip_code as zip16_14_ from admin admin0_ where admin0_.email='stephane@thalasoft.com' limit 2;
                +-------+------------+------------+---------+------------+------------------------+--------------+-------------+----------+--------------+----------------+------------+------------------+------------+-------------+-----------+
                | id14_ | version14_ | address14_ | city14_ | country14_ | email14_ | firstname14_ | lastname14_ | login14_ | password14_ | password11_14_ | post12_14_ | preference13_14_ | profile14_ | super15_14_ | zip16_14_ |
                +-------+------------+------------+---------+------------+------------------------+--------------+-------------+----------+--------------+----------------+------------+------------------+------------+-------------+-----------+
                | 1807 | 0 | NULL | NULL | NULL | stephane@thalasoft.com | Toto | LeHeros | qwerty | zpassword039 | | NULL | 0 | NULL | 0 | NULL | 
                +-------+------------+------------+---------+------------+------------------------+--------------+-------------+----------+--------------+----------------+------------+------------------+------------+-------------+-----------+
                1 row in set (0.00 sec)
                
                mysql> select admin0_.id as id14_, admin0_.version as version14_, admin0_.address as address14_, admin0_.city as city14_, admin0_.country as country14_, admin0_.email as email14_, admin0_.firstname as firstname14_, admin0_.lastname as lastname14_, admin0_.login as login14_, admin0_.password as password14_, admin0_.password_salt as password11_14_, admin0_.post_login_url as post12_14_, admin0_.preference_admin as preference13_14_, admin0_.profile as profile14_, admin0_.super_admin as super15_14_, admin0_.zip_code as zip16_14_ from admin admin0_ where admin0_.login='qwerty' limit 2;
                +-------+------------+------------+---------+------------+------------------------+--------------+-------------+----------+--------------+----------------+------------+------------------+------------+-------------+-----------+
                | id14_ | version14_ | address14_ | city14_ | country14_ | email14_ | firstname14_ | lastname14_ | login14_ | password14_ | password11_14_ | post12_14_ | preference13_14_ | profile14_ | super15_14_ | zip16_14_ |
                +-------+------------+------------+---------+------------+------------------------+--------------+-------------+----------+--------------+----------------+------------+------------------+------------+-------------+-----------+
                | 1807 | 0 | NULL | NULL | NULL | stephane@thalasoft.com | Toto | LeHeros | qwerty | zpassword039 | | NULL | 0 | NULL | 0 | NULL | 
                +-------+------------+------------+---------+------------+------------------------+--------------+-------------+----------+--------------+----------------+------------+------------------+------------+-------------+-----------+
                1 row in set (0.00 sec)
                

                那么为什么这没有反映在 Java 级别呢?

                So why is this not reflected at the Java level ?

                推荐答案

                EntityManager 默认不会自动刷新更改.您应该在查询语句中使用以下选项:

                The EntityManager doesn't flush change automatically by default. You should use the following option with your statement of query:

                @Modifying(clearAutomatically = true)
                @Query("update RssFeedEntry feedEntry set feedEntry.read =:isRead where feedEntry.id =:entryId")
                void markEntryAsRead(@Param("entryId") Long rssFeedEntryId, @Param("isRead") boolean isRead);
                

                这篇关于Spring Data JPA Update @Query 没有更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
                How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
                Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
                Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
                How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
                How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)

                    <tbody id='p9fLy'></tbody>

                    <bdo id='p9fLy'></bdo><ul id='p9fLy'></ul>
                  • <legend id='p9fLy'><style id='p9fLy'><dir id='p9fLy'><q id='p9fLy'></q></dir></style></legend>

                    <small id='p9fLy'></small><noframes id='p9fLy'>

                  • <tfoot id='p9fLy'></tfoot>

                        • <i id='p9fLy'><tr id='p9fLy'><dt id='p9fLy'><q id='p9fLy'><span id='p9fLy'><b id='p9fLy'><form id='p9fLy'><ins id='p9fLy'></ins><ul id='p9fLy'></ul><sub id='p9fLy'></sub></form><legend id='p9fLy'></legend><bdo id='p9fLy'><pre id='p9fLy'><center id='p9fLy'></center></pre></bdo></b><th id='p9fLy'></th></span></q></dt></tr></i><div id='p9fLy'><tfoot id='p9fLy'></tfoot><dl id='p9fLy'><fieldset id='p9fLy'></fieldset></dl></div>