强制存储库接口具有某些方法
Enforce repository interfaces to have certain methods
我有一个存储库:
狗:
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 处获得,导致异常的代码已被注释掉。
是什么导致了这些异常,我该如何修复或解决它?
从推特上的@thought_forge 得到了答案。
移动到:
@NamedQuery(name="Dog.findOneForUser", query="select d from Dog d where ?1 MEMBER OF d.owners and d.id = ?2")
在域资源上而不是在存储库上,异常消失并且应用程序按预期执行。
@Query 可能存在错误。
我将相应地更新链接的 github 示例。
我有一个存储库:
狗:
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 处获得,导致异常的代码已被注释掉。
是什么导致了这些异常,我该如何修复或解决它?
从推特上的@thought_forge 得到了答案。
移动到:
@NamedQuery(name="Dog.findOneForUser", query="select d from Dog d where ?1 MEMBER OF d.owners and d.id = ?2")
在域资源上而不是在存储库上,异常消失并且应用程序按预期执行。
@Query 可能存在错误。
我将相应地更新链接的 github 示例。