spring data jpa CrudRepository 方法调用错误如何解决?
spring data jpa 的CrudRepository源码如下 :
@NoRepositoryBean public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { void delete(ID entityId); void delete(T entity); // 其他方法。。。 }
我定义了一个基础BaseRepository接口 继承自JpaRepository (而JpaRepository 继承了CrudRepository):
@NoRepositoryBean public interface BaseRepository<T ,ID extends Serializable> extends JpaRepository<T, ID> { }
然后我定义一个抽象类,想分别调用这两个CrudRepository 的2个 delete方法:
public abstract class AbstractBaseService<T extends Serializable> implements BaseService<T> { public abstract BaseRepository getDao(); @Override public void delete(Long entityId) { getDao().delete(entityId);//正确调用了CrudRepository 的void delete(ID entityId) } @Override public void delete(T entity) { //因为T也实现了Serializable, 所以实际调用了CrudRepository 的void delete(ID entityId)方法, 而不是我想调用的void delete(T entity)方法 getDao().delete(entity); } }
由于继承的原因, 结果导致调用的时候两个delete方法签名一致了,都是void (XX ) ,其中XX实现Serializable接口。
当然我可以把各自的delete接口单独定义在不同的service接口中,但如果不这样做 :请问有什么别的巧妙方法解决这个问题?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
void deleteByEntityId(ID entityId);