spring data jpa CrudRepository 方法调用错误如何解决?
时间: 2016-02-22来源:开源中国
HDC调试需求开发(15万预算),能者速来!>>>
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接口中,但如果不这样做 :请问有什么别的巧妙方法解决这个问题?
谢谢





热门排行