Поиск объекта из @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 разрешает вложенные свойства, можно найти в разделе:

Выражения свойств запроса