左加入 hql 中的第一场比赛

left join first match in hql

select 
    schedulingpool.id,
    schedulingpool.allocationVersion,
    schedulingpool.tx.statusId,
    schedulingpool.name,
    schedulingpool.description,
    schedulingpool.schedulingPoolAddresses.name,
    schedulingpool.schedulingPoolAddresses.zip,
    schedulingpool.schedulingPoolAddresses.city,
    schedulingpool.schedulingPoolAddresses.countryId,
    schedulingpool.schedulingPoolAddresses.street,
    schedulingpool.statusId,
    schedulingpool.tx.name,
    schedulingpool.note1,
    schedulingpool.note2
from 
    com.xx.module.mm.jpa.SchedulingPool as schedulingpool 
left join schedulingpool.tx
left join schedulingpool.schedulingPoolAddresses
where schedulingpool.clientId = :clientId
     order by schedulingpool.id DESC

javax.servlet.ServletException: java.lang.IllegalArgumentException: org.hibernate.QueryException: illegal attempt to dereference collection [scheduling0_.id.schedulingPoolAddresses] with element property reference [name]

一个调度池可以有多个地址,当我执行语句时出现异常。 有没有办法只获取匹配的第一个地址并将其加入以防止出现此异常?

您需要使用别名

select 
    schedulingpool.id,
    schedulingpool.allocationVersion,
    tx.statusId,
    schedulingpool.name,
    schedulingpool.description,
    schedulingPoolAddresses.name,
    schedulingPoolAddresses.zip,
    schedulingPoolAddresses.city,
    schedulingPoolAddresses.countryId,
    schedulingPoolAddresses.street,
    schedulingpool.statusId,
    tx.name,
    schedulingpool.note1,
    schedulingpool.note2
from 
    com.xx.module.mm.jpa.SchedulingPool as schedulingpool 
left join schedulingpool.tx tx
left join schedulingpool.schedulingPoolAddresses schedulingPoolAddresses
where schedulingpool.clientId = :clientId
     order by schedulingpool.id DESC

并且您需要在 SchedulingPool class 与 schedulingPoolAddressestx.

中建立关联