首页 > 解决方案 > spring-data-jdbc deleteBy方法返回异常结果类型

问题描述

我尝试使用这样的 spring-data-jdbc 存储库声明和使用 deleteBy 方法

public interface TokenRepository extends CrudRepository<OpToken, Long> {
   void deleteByBreed(Long breed);
}

当我尝试调用方法时

private TokenRepository tokenRepository;
...
...
tokenRepository.deleteByBreed(123L);

我得到了异常:MethodNotFoundException:

java.lang.NoSuchMethodException: void.()

我决定,删除方法应该返回它处理的行数。所以,我像这样重写我的存储库界面

public interface TokenRepository extends CrudRepository<OpToken, Long> {
   long deleteByBreed(Long breed);
}

但现在我又遇到了另一个异常:org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 4

它看起来像方法返回实体或它尝试删除的实体列表。但我不需要它们。在我的情况下如何声明此方法?

按实体看起来像这样:

@Data
public class OpToken implements Persistable<Long> {

  @Transient
  private boolean newEntity;

  @Id
  @Column("jti")
  private Long jti;

  @Column("breed")
  private Long breed;

  @Column("id_account")
  private Long idAccount;

  @Column("exp")
  private Date exp;

  @Override
  public Long getId() {
    return jti;
  }

  @Override
  public boolean isNew() {
    return newEntity;
  }
}

标签: javaspring-data-jdbc

解决方案


它只有一个工作

   @Modifying
   @Query("delete from account.op_token t where t.breed = :breed")
   Long(or void) deleteByBreed(@Param("breed") Long breed);

推荐阅读