spring实体更新查询检查结果

时间:2018-02-17 15:58:09

标签: java spring spring-data-jpa jpql

我有实体类会计师。 我正在尝试保存它的更新值。 我无法做到。

我没有看到任何错误日志。如何检查更新查询是否成功执行

@Repository("accountantRepository")
@Transactional
public interface AccountantRepository extends JpaRepository<Accountant, Long> {

     public final static String UPDATE_ACCOUNTANT = "update Accountant acct SET acct.password =:password, acct.phoneNumber =:phoneNumber,"
            + " acct.state =:state, acct.postCode =:postCode, acct.country =:country where acct.id =:accountantId ";

@Query(UPDATE_ACCOUNTANT)
 @Modifying
 void updateAccountant(@Param("password") String password, @Param("phoneNumber") String phoneNumber,
         @Param("state") String state, @Param("postCode") String postCode, @Param("country") String country,
         @Param("accountantId") String accountantId);
}

在我的accountantServiceImpl.java类中我做了

public void updateAccountant(Accountant acct) {

    accountantRepository.updateAccountant(acct.getPassword(), acct.getPhoneNumber(), acct.getState(),
            acct.getPostCode(), acct.getCountry(), acct.getId());       
}

1 个答案:

答案 0 :(得分:0)

hibernet save()仅在主键(大多数情况下为“id”字段)时更新在您传递给save()的对象中设置方法。如果找不到,它会尝试插入一条新记录,如果您没有任何数据库级别限制,该记录将成功。

JPD还提供了自己的自定义实现。你可以这样做。

  1. 创建一个界面 AccountantRepositoryCustom 并添加您想要的方法,例如的 updateAccountant

    public interface AccountantRepositoryCustom { void updateAccountant(); }

  2. 使用此客户界面扩展您的存储库

  3. public interface AccountantRepository extends JpaRepository<Accountant, Long> , AccountantRepositoryCustom

    1. 为AccountantRepositoryCustom创建一个实现类 AccountantRepositoryImpl
    2. public class AccountantRepositoryImpl implements AccountantRepositoryCustom { @Override public void updateAccountant () { // you code here }

      注意:自定义接口和实现类的名称很重要,因为JPA遵循一些控制来制定映射。因此,自定义存储库必须以Custom结尾,实现类的名称应以Impl结尾(您可以覆盖此设置,但在大多数情况下都会执行此默认设置)