spring data jpa CrudRepository 方法调用错误如何解决?

发布于 2021-11-27 20:13:13 字数 1443 浏览 851 评论 1

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别低头,皇冠会掉 2021-11-29 14:58:25

void deleteByEntityId(ID entityId);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文