如何将条件限制为另一个 table 中的 fk?
How to limit a criteria to fk's in another table?
我有一个 table、car
,每辆车都有一个 id
可能会出现在 option
中(选项包括除霜器、电源 windows, 等) 在 FK_car_id
列中。所以 car
与 option
.
是 0 对多的关系
我需要有选项的车。
SQL 看起来像这样:
SELECT c.* from car c
LEFT JOIN options o on c.id = o.FK_car_id
GROUP BY c.id;
如何在休眠状态下执行此操作?这是我尝试过的:
var c = newCriteria().readOnly();
c.createAlias('car','car');
c.sqlRestriction('SELECT c.* from car c LEFT JOIN options o on c.id = o.FK_car_id GROUP BY c.id');
c.return c.list(asQuery = false);
但我得到 "Could not extract Result Set"。
注意:这是我的代码的简化表示,用于突出主要问题并生成最小示例。
使用这个:
c.createCriteria(Car.class, "car")
.createAlias("car.options", "options", JoinType.LEFT_OUTER_JOIN)
.setProjection(Projections.groupProperty("car.id"));
我有一个 table、car
,每辆车都有一个 id
可能会出现在 option
中(选项包括除霜器、电源 windows, 等) 在 FK_car_id
列中。所以 car
与 option
.
我需要有选项的车。
SQL 看起来像这样:
SELECT c.* from car c
LEFT JOIN options o on c.id = o.FK_car_id
GROUP BY c.id;
如何在休眠状态下执行此操作?这是我尝试过的:
var c = newCriteria().readOnly();
c.createAlias('car','car');
c.sqlRestriction('SELECT c.* from car c LEFT JOIN options o on c.id = o.FK_car_id GROUP BY c.id');
c.return c.list(asQuery = false);
但我得到 "Could not extract Result Set"。
注意:这是我的代码的简化表示,用于突出主要问题并生成最小示例。
使用这个:
c.createCriteria(Car.class, "car")
.createAlias("car.options", "options", JoinType.LEFT_OUTER_JOIN)
.setProjection(Projections.groupProperty("car.id"));