使用JPA检索带有列表的DTO



是否有办法在JPA的单个查询中获得这样的对象?

data class PartcipantsDTO(
val max: Int,
val list: List<ParticipantCardDTO>
) // this one
ParticipantCardDTO(
val id: Long,
val name: String
)

假设实体看起来像:

@Entity
ParticipantEntity(
@Id id: Long,
name: String,
@ManyToOne event: EventEntity
)
@Entity
EventEntity(
@Id id: Long,
@OneToMany participants: List<Long>
)

按EventEntity id搜索正在尝试如下查询:

SELECT new com.***.ParticipantsDTO(
e.max,
SELECT new ParticipantCardDTO(
p.id,
p.name
)
)
FROM ParticipantEntity p, EventEntity e
WHERE p.id IN e.participants AND e.id = :id

但是行不通

我知道它可以用2个单独的查询完成,但我想避免由于效率低下而打开2个连接

您可以使用JPA获得ParticipantEntity,然后将它和它的参与者列表映射到Java中的DTO, hibernate将处理它的属性。

这是因为hibernate有缓存,可以自己处理性能问题。

最新更新