Недавно я переключился с JEE на Spring Boot, и я люблю его до сих пор. Но я столкнулся с небольшой проблемой. У меня есть этот метод, который извлекает ленивые ссылки, которые используются, чтобы посмотреть что-то вроде этого:Весенние данные динамические @Query на основе параметров возможны?
public Foo getParentWithChildren(long id, boolean isFetchChild, boolean isFetchPets) {
StringBuilder sql = new StringBuilder();
sql.append("select DISTINCT(p) from Parent p");
if(isFetchChild) {
sql.append(" left join p.child c");
} if(isFetchPets) {
sql.append(" left join p.pets pts");
}
sql.append(" where p.id=:id");
TypedQuery<Foo> query = em.createQuery(sql.toString(), Foo.class);
query.setParameter("id", id);
return query.getSingleResult();
}
Теперь с весенними данными и их удивительными интерфейсами я хотел бы сделать что-то simlar с помощью аннотаций @Query на границе вместо того, чтобы написать пользовательскую реализацию. Но возможно ли что-то подобное использовать только с интерфейсом.
В приведенном ниже примере, очевидно, не работает, но я надеюсь, вы понимаете, что я пытаюсь acchieve
@Query("select distinct(p) from Parent p " +
(fetchChild ? " left join p.child c" : "") +
(fetchPets ? " left join p.pets pts" : "") +
" where p.id=:id")
Foo getParentWithChildren(@Param("id") long id, @Param("fetchChild") boolean isFetchChild, @Param("fetchPets") boolean isFetchPets);
я что-то подобное возможно?
Нет, но если это ваш точный случай, вы можете создать 2 метода в интерфейсе и вызвать соответствующий один в соответствии с 'isFetchChild'. –
На самом деле реальный родитель имеет 5 детей, например 5 булевых параметров. И есть разные комбинации. Иногда вам нужен ребенок 1 и 3, иногда только 4, иногда все 5 и т. Д. Итак, мне придется писать методы для всех возможных сценариев? – Johan