我对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
答案 0 :(得分:0)
查询将类似于:
@Query("select p from ParentElement p JOIN p.values val where val.attribute = ?1 ")
fun findByChildAttribute(attribute: Long): List<ParentElementData>
如您所见,@ElementCollection
与@OneToMany
一样工作。