Выбор элемента по атрибуту объекта в коллекции элементов - PullRequest
0 голосов
/ 07 января 2019

Я не очень глубоко разбираюсь в JPA Queries, и у меня текущая ситуация:

@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,
)

Чего я хотел бы добиться, так это получить все ParentElements, для которых ChildElement.attribute имеет определенное значение.

Итак, я начал с репозитория

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 голосов
/ 07 января 2019

Запрос будет выглядеть так:

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

Как видите, @ElementCollection работает так же, как @OneToMany.

...