Spring Data JPA findAll with different quantityGraph

56lgkhnf  于 2023-10-15  发布在  Spring
关注(0)|答案(2)|浏览(151)

在Spring Data JPA Repository中,我需要指定多个方法来做同样的事情(例如,findAll),但指定不同的@ bottyGraph注解(目标是在不同的服务中使用优化的方法)。
Es.

@Repository
public interface UserRepository extends JpaSpecificationExecutor<User>, JpaRepository<User, Long> {

@EntityGraph(attributePaths = { "roles" })
findAll[withRoles](Specification sp);

@EntityGraph(attributePaths = { "groups" })
findAll[withGroups](Specification sp);

etc...
}

在Java中,我们不能让同一个方法多次签名,那么如何管理它呢?
可以不使用JPQL吗?
谢谢你,
Gabriele

uqzxnwby

uqzxnwby1#

您可以使用EntityGraphJpaSpecificationExecutor根据您的方法传递不同的entitygraph

@Repository
public interface UserRepository extends JpaSpecificationExecutor<User>, JpaRepository<User, Long>, EntityGraphJpaSpecificationExecutor<User> {

}

在你的服务类中,你可以用实体图调用find all。

List<User> users = userRepository.findAll(specification, new NamedEntityGraph(EntityGraphType.FETCH, "graphName"))

像上面一样,你可以根据你的需求使用不同的实体图。

qxgroojn

qxgroojn2#

你可以在你的仓库中创建两个默认方法,使用相同的签名,像这样:

public interface UserRepository extends JpaSpecificationExecutor<User>, JpaRepository<User, Long> {

    @EntityGraph(attributePaths = { "roles" })
    default List<Roles> findAllByRoles(Specification sp){
       return findAll(sp);
    }

    @EntityGraph(attributePaths = { "groups" })
    default List<Roles> findAllByGroups(Specification sp){
       return findAll(sp);
    }
}

相关问题