我有一个Entity
和Enum -> String
这样的@CollectionTable
:
@Entity
@Table(name = "place")
public class Place {
//....
@Enumerated(EnumType.STRING)
@CollectionTable(name = "general_place_type", joinColumns = @JoinColumn(name = "place_id"))
@Column(name = "place_type")
@ElementCollection(fetch = FetchType.EAGER)
private Set<GeneralPlaceType> types;
//....
}
我的Spring Data Repository中也有以下查询方法:
@Query("SELECT p FROM Place p WHERE ...... AND :type MEMBER OF p.types AND ......")
Page<Place> getAllByGeneralSingleType(@Param("type") GeneralPlaceType type, Pageable pageable);
//Conditions non-related to question topic are marked with dots
实际上,它可以很好地工作并且可以完成工作-查找所有类型包含传入类型的地方。
我正在考虑采用类似(?)方法来汇总具有搜索条件的一个关键条件的地点:每个地点应包含来自传入的 至少一个 类型Collection
中的GeneralPlaceType
:
//It might look like this
Page<Place> getAllByGeneralMultipleTypes(@Param("types") Set<GeneralPlaceType>, Pageable pageable);
如何使用JPQL @Query
甚至是纯Spring Data Repository方法来实现该功能?