强制存储库接口具有某些方法

时间:2015-01-03 07:47:20

标签: java spring spring-data-jpa

我有一个存储库:

犬:

public interface DogRepository extends JpaRepository<Dog, Long> {

    @Query("select d from Dog d where ?1 MEMBER OF d.owners")
    List<Dog> findAllForUser(String user);

    @Query("select d from Dog d where ?1 MEMBER OF d.owners and d.id = ?2")
    Dog findOneForUser(String user, Long id);
}

我想要一个强制创建findAllForUser和findOneForUser的RestrictedRepository:

@NoRepositoryBean
public interface RestrictedRepository<T, ID extends Serializable> extends JpaRepository<T, ID>{
    List<T> findAllForUser(String user)
    T findOneForUser(String user, Long id);
}

我希望Dog存储库扩展它而不是JpaRepository。但是每次我这样做都会得到例外:

org.springframework.data.mapping.PropertyReferenceException:找不到类型Dog的属性findOneForUser!

从RestrictedRepository中删除findOneForUser方法可以解决此问题,我的findAllForUser可以按预期工作。

https://github.com/imduffy15/spring-boot-sample-data-jpa处可用的完整代码示例导致异常的代码已被注释掉。

导致这些例外的原因是什么,我该如何修复或解决它?

1 个答案:

答案 0 :(得分:0)

在Twitter上的@thought_forge得到了答案。

转到:

@NamedQuery(name="Dog.findOneForUser", query="select d from Dog d where ?1 MEMBER OF d.owners and d.id = ?2")

在域资源而不是存储库上,异常消失,应用程序按预期执行。

可能是@Query的错误。

我将相应地更新链接的github示例。