Поиск объекта из @ElementCollection
Я использую Spring Data JPA.
Я такая сущность
public class A {
@CollectionTable(name = "B_ITEMS", joinColumns = @JoinColumn(name = "B_ID"))
@ElementCollection
private List<B> bs;
}
И класс Embedded
@Embeddable
public class B {
private String prop1
private String prop2
private String prop3
}
Как выполнить поиск объекта A с помощью содержимого @ElementCollection B?
И здесь мой репозиторий Spring Data JPA Repositry
public interface ARepo extends PagingAndSortingRepository<Clinic, Long> {
}
Какое имя метода запроса применимо для моего варианта использования?
Ответы
Ответ 1
@ElementCollection
- это просто простой способ @OneToMany
отношения @OneToMany
.
Таким образом, вы можете присоединиться к ним, как обычно:
public interface ARepo extends PagingAndSortingRepository<A, Long> {
@Query("select a from A a join a.bs b where b.prop1 = :prop1 and ...")
A findByProps(@Param("prop1") String prop1)
}
Ответ 2
Кажется, вы запрашиваете базовый запрос IN в Spring Data - findBybsIn(List<B> bs)
Ответ 3
Вместо использования @Query, как в ответе @Zeromus, вы также можете определить его по имени метода (findByElementCollectionProperty_NestedProperty):
public interface ARepo extends JPARepository<A,Long> {
List<A> findByBs_Prop1(String prop1);
}
Дополнительная информация о том, как SpringData разрешает вложенные свойства, можно найти в разделе:
Выражения свойств запроса