【问题标题】:Ambiguous method call in Intellij with Spring Data JPA interface带有 Spring Data JPA 接口的 Intellij 中的模棱两可的方法调用
【发布时间】:2016-04-19 01:42:27
【问题描述】:

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

用户存储库:

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

用户提供者:

public interface UserProvider {
    User findOne(String userId);
}

除了需要第二个接口的原因之外,我假设因为这些是接口并且 findOne 的方法签名是相同的,编译器在处理歧义时不会有问题。我对Java的理解不正确,还是这是一个intellij问题? CrudRepository 接口通过泛型解决是否存在问题?

【问题讨论】:

    标签: java intellij-idea spring-data-jpa intellij-14


    【解决方案1】:

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

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

    然而,在花了几个小时之后,我设法通过使用 @RepositoryDe​​finition 注释我的存储库而不是从 CrudRepository 扩展它来克服这个问题。使用您的示例,它将是:

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

    【讨论】:

    • 很好,我会试试的。谢谢!
    【解决方案2】:

    我相信findOne 现在是findById,我遇到了同样的错误。我发现即使 IntelliJ 报告这些方法具有相同的签名,但它们实际上并不具有相同的签名,因为 CrudRepository 是通用的,而我的不是。

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

    // UserRepository
    @Repository
    public interface UserRepository extends CrudRepository<User, String>, UserProvider {
    } 
    
    // UserProvider
    public interface UserProvider<E, ID> {
        E findOne(ID userId);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      相关资源
      最近更新 更多