是否有办法在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有缓存,可以自己处理性能问题。