【发布时间】:2021-02-03 10:05:40
【问题描述】:
我有一个 Event 实体,如下所示。每个事件可能有一个 EventDetails 列表,如下所示。 (为了便于说明,我尽量简化了这些对象)
@Entity(name = "event")
data class Event(
@Id
@GeneratedValue
@Type(type = "uuid-char")
val id: UUID = UUID.randomUUID(),
@OneToMany(
cascade = [CascadeType.ALL],
orphanRemoval = true
)
@JoinColumn(
name = "event_id",
nullable = false
)
val eventDetails: List<EventDetails>
)
@Entity(name = "event_details")
data class EventDetails(
@Id
@GeneratedValue
@Type(type = "uuid-char")
val id: UUID = UUID.randomUUID(),
val type: String
)
我有一个查询,我想返回所有具有特定类型详细信息的事件,但更重要的是,对于每个事件,我只想返回具有所提供类型的详细信息列表 - 在这种情况下,hibernate 返回不是我想要的完整列表。
所以我基本上想根据传递给查询的内容返回事件详细信息的部分列表,但每次都会返回完整的实体列表。这似乎是因为休眠获取与查询匹配的事件,然后根据我设置的内容对所有 EventDetails 进行 Eager / Lazy 获取,而不考虑查询不想返回列表的所有值.
这是突出显示问题的查询 -
@Repository
interface EventRepository : CrudRepository<Event, UUID> {
@Query(
"""
select e.* from event e
join event_details ed on e.id = ed.event_id
where ed.type in :types
""", nativeQuery = true
)
fun findEventsByDetails(
@Param("types") types: List<String>
): List<AwardEvent>
}
这是一个突出问题的示例。如果我有这样的活动-
Event(eventDetails = listOf(EventDetails(type = "TEST"), EventDetails("OTHER")))
然后我运行以下命令 -
eventRepository.findEventsByDetails(listOf("TEST"))
那么它应该返回一个事件列表 -
Event(eventDetails = listOf(EventDetails(type = "TEST")))
没有包括类型“OTHER_TEST”在内的详细信息
如果有人有任何想法,那将不胜感激
【问题讨论】:
标签: hibernate spring-data-jpa spring-repositories