我有实体类会计师。 我正在尝试保存它的更新值。 我无法做到。
我没有看到任何错误日志。如何检查更新查询是否成功执行
@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());
}
答案 0 :(得分:0)
hibernet save()仅在主键(大多数情况下为“id”字段)时更新在您传递给save()的对象中设置方法。如果找不到,它会尝试插入一条新记录,如果您没有任何数据库级别限制,该记录将成功。
JPD还提供了自己的自定义实现。你可以这样做。
创建一个界面 AccountantRepositoryCustom 并添加您想要的方法,例如的 updateAccountant 强>
public interface AccountantRepositoryCustom {
void updateAccountant();
}
使用此客户界面扩展您的存储库
public interface AccountantRepository extends JpaRepository<Accountant, Long> , AccountantRepositoryCustom
public class AccountantRepositoryImpl implements AccountantRepositoryCustom {
@Override
public void updateAccountant () {
// you code here
}
注意:自定义接口和实现类的名称很重要,因为JPA遵循一些控制来制定映射。因此,自定义存储库必须以Custom结尾,实现类的名称应以Impl结尾(您可以覆盖此设置,但在大多数情况下都会执行此默认设置)