过滤计数不同于其他 table
Filter with count distinct from other table
我有两个表如下:
我试图找到每根至少有 2 种类型的引脚的电线,也可以有很多相同类型的引脚分配给 1 根电线。
我在 sql 中的逻辑是这样的:
select * from wire x where (select count(*) from pin y where x.id = y.wireId) = 2;
我已经尝试过一些方法,最后一个是:
DetachedCriteria cav = criteriaQuery.createCriteria("pins");
cav.setProjection(Projections.countDistinct("type")).setResultTransformer(Criteria.ROOT_ENTITY);
criteriaQuery.add(Subqueries.eq(Integer.parseInt(value), cav));
这导致休眠中的 getTypedValues 出现空指针异常。
任何帮助将不胜感激,即使它只是更好地学习休眠的更多资源
可能不是最好的答案,但现在我通过这样做解决了它:
DetachedCriteria a = DetachedCriteria.forClass(Pin.class);
String groupBy = "wireId having count(DISTINCT type) >=2";
String[] alias = new String[1];
alias[0] = "wireId ";
Type[] types = new Type[1];
types[0] = Hibernate.STRING;
a.setProjection(Projections.sqlGroupProjection("wireId", groupBy, alias, types));
criteriaQuery.add(Subqueries.propertyIn("wireId", a));
我有两个表如下:
我试图找到每根至少有 2 种类型的引脚的电线,也可以有很多相同类型的引脚分配给 1 根电线。
我在 sql 中的逻辑是这样的:
select * from wire x where (select count(*) from pin y where x.id = y.wireId) = 2;
我已经尝试过一些方法,最后一个是:
DetachedCriteria cav = criteriaQuery.createCriteria("pins");
cav.setProjection(Projections.countDistinct("type")).setResultTransformer(Criteria.ROOT_ENTITY);
criteriaQuery.add(Subqueries.eq(Integer.parseInt(value), cav));
这导致休眠中的 getTypedValues 出现空指针异常。
任何帮助将不胜感激,即使它只是更好地学习休眠的更多资源
可能不是最好的答案,但现在我通过这样做解决了它:
DetachedCriteria a = DetachedCriteria.forClass(Pin.class);
String groupBy = "wireId having count(DISTINCT type) >=2";
String[] alias = new String[1];
alias[0] = "wireId ";
Type[] types = new Type[1];
types[0] = Hibernate.STRING;
a.setProjection(Projections.sqlGroupProjection("wireId", groupBy, alias, types));
criteriaQuery.add(Subqueries.propertyIn("wireId", a));