Mad*_*Max 4 java spring-data-jdbc
我尝试声明并使用带有 spring-data-jdbc 存储库的 deleteBy 方法,如下所示
public interface TokenRepository extends CrudRepository<OpToken, Long> {
void deleteByBreed(Long breed);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试调用方法时
private TokenRepository tokenRepository;
...
...
tokenRepository.deleteByBreed(123L);
Run Code Online (Sandbox Code Playgroud)
我得到异常:MethodNotFoundException:
java.lang.NoSuchMethodException: void.()
我决定,删除方法应该返回它处理的行数。所以,我像这样重写我的存储库界面
public interface TokenRepository extends CrudRepository<OpToken, Long> {
long deleteByBreed(Long breed);
}
Run Code Online (Sandbox Code Playgroud)
但现在我遇到了另一个异常:org.springframework.jdbc.In CorrectResultSetColumnCountException:不正确的列计数:预期 1,实际 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;
}
}
Run Code Online (Sandbox Code Playgroud)
当前版本尚不支持派生删除查询。观看https://github.com/spring-projects/spring-data-jdbc/issues/771以在发生变化时收到通知。
@MadMax提供的解决方案是正确的:使用了专用查询:
@Modifying
@Query("delete from account.op_token t where t.breed = :breed")
void deleteByBreed(@Param("breed") Long breed);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |