左加入 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 与 schedulingPoolAddresses
和 tx
.
中建立关联
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 与 schedulingPoolAddresses
和 tx
.