在元素集合中按对象属性选择元素

时间:2019-01-07 14:20:30

标签: spring-data-jpa jpql

我对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,但尚不可行。

Thx

1 个答案:

答案 0 :(得分:0)

查询将类似于:

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

如您所见,@ElementCollection@OneToMany一样工作。