Select 元素集合中的对象属性元素

Select element by object attribute in element collection

我对 JPA 查询不是很深入,目前的情况是:

@Entity(name = "ParentElement")
@Table(name = "parent_element")
data class ParentElementData(
        @Id
        @GeneratedValue
        val id: Long?,
        @ElementCollection
        var values: List<ChildElementData> = emptyList(),
)

@Entity(name = "ChildElement")
@Table(name = "child_element")
data class ChildElementData(
        @Id
        @GeneratedValue
        val id: Long?,
        @Column(nullable = false)
        val attribute: Long,
)

我想要实现的是获取 ChildElement.attribute 具有特定值的所有 ParentElements。

所以我从存储库开始

interface ParentElementRepository : CrudRepository<ParentElementData, Long> {
   @Query("select p from ParentElement p where p.values ")
   fun findByChildAttribute(attribute: Long): List<ParentElementData> 
}

但我不知道如何完成查询。 看了一下:https://github.com/odrotbohm/repositories-deepdive/blob/master/src/main/java/de/olivergierke/deepdive/ProductRepository.java 但还没有用。

感谢

查询如下:

@Query("select p from ParentElement p JOIN p.values val where val.attribute = ?1 ")
fun findByChildAttribute(attribute: Long): List<ParentElementData> 

如您所见,@ElementCollection 的工作方式与 @OneToMany 相同。