Java Intellij中带有Spring数据JPA接口的方法调用不明确

Java Intellij中带有Spring数据JPA接口的方法调用不明确,java,intellij-idea,spring-data-jpa,intellij-14,Java,Intellij Idea,Spring Data Jpa,Intellij 14,intellij报告了一个奇怪的模棱两可的方法调用错误。我使用的spring数据JPA接口也实现了具有相同方法签名的接口: 用户存储库: @Repository public interface UserRepository extends CrudRepository<User, String>, UserProvider { } 撇开需要第二个接口的原因不谈,我假设因为这些是接口,findOne的方法签名是相同的,所以编译器在处理歧义方面不会有问题。我是不是不理解Java,还

intellij报告了一个奇怪的模棱两可的方法调用错误。我使用的spring数据JPA接口也实现了具有相同方法签名的接口:

用户存储库:

@Repository
public interface UserRepository extends CrudRepository<User, String>, UserProvider {
} 

撇开需要第二个接口的原因不谈,我假设因为这些是接口,findOne的方法签名是相同的,所以编译器在处理歧义方面不会有问题。我是不是不理解Java,还是这是一个intellij问题?通过泛型解决Crudepository接口的问题吗?

我也遇到过同样的问题。在我的例子中,我的IDE(Eclipse)没有报告任何错误,但是当从控制台通过Maven构建项目时,我在testCompile期间遇到了关于方法abiguity的错误

我怀疑这与Eclipse和Maven使用的不同Java编译器有关,但即使在我验证它们都使用相同的JDK(jdk1.8.091)时,问题仍然存在

然而,在花了几个小时的时间之后,我设法克服了这个问题,用@RepositoryDefinition注释了我的存储库,而不是从crudepository扩展它。使用您的样本,它将是:

@RepositoryDefinition(domainClass = User.class, idClass = String.class)
public interface UserRepository extends UserProvider {
}

我相信
findOne
现在是
findById
,我遇到了相同的错误。我发现,尽管IntelliJ报告的方法具有相同的签名,但它们实际上并不具有相同的签名,因为
crudepository
是泛型的,而我的不是

我相信如果您将
UserProvider
更新为通用,错误就会消失:

//用户存储库
@存储库
公共接口UserRepository扩展了Crudepository、UserProvider{
} 
//用户提供者
公共接口用户提供者{
E findOne(ID userId);
}

不错,我试试看。谢谢
@RepositoryDefinition(domainClass = User.class, idClass = String.class)
public interface UserRepository extends UserProvider {
}