если нужно делать findAll, но с разными entityGraphs?
@Override
@EntityGraph(attributePaths = {"activity", "roles"})
// в другой раз надо будет допустим только roles подтягивать, как тогда создать еще один метод?
List<User> findAll();
Проблема в том, что происходит коллизия имён, ведь я не могу создать 10 findall методов с одинаковой сигнатурой но разными аннотациями. Корявые варианты, которые приходят в голову: создавать кучу репозиториев, в каждом из которых будет свой findall; писать нативные sql; в некоторых случаях (насколько вижу) можно иногда называть методы getAll/readAll (но это костыли жесточайшие);
расширь репу кастомным классом и сделай метод принимающий граф как-то так Page<T> findAll(Specification<T> spec, Pageable pageable, String graphName, EntityGraphType graphType); *как реализовать метод можешь глянуть в спринговом SimpleJpaRepository
Спасибо. Тогда потом буду гуглить как наследоваться от репозиториев
private static Specification<User> fetchActivity() { return (root, cq, cb) -> { if (Long.class != cq.getResultType()) { root.fetch("activity", JoinType.LEFT); } return null }; } private static Specification<User> fetchRoles() { return (root, cq, cb) -> { if (Long.class != cq.getResultType()) { root.fetch("roles", JoinType.LEFT); } return null }; } // usage repository.findAll(fetchActivity().and(fetchRoles())) repository.findAll(fetchActivity()) repository.findAll(fetchRoles()) если правильно понял задачу, то как-то так
О, вроде четко, дома протестирую, сэнкс
https://thorben-janssen.com/jpa-21-entity-graph-part-2-define/#Dynamic_entity_graph
Обсуждают сегодня