从多组Hibernate投影返回单列

时间:2015-11-19 16:49:04

标签: java hibernate orm hibernate-criteria

我想要实现的目标: 选择具有值列表中存在的属性值的实体的susbset。此列表由另一个查询返回。

在纯SQL中,使用子查询可以轻松实现这一点。这是Criteria查询,它返回相关值:

DetachedCriteria subq = DetachedCriteria.forClass(MyClass.class)
    .setProjection(
        Projections.projectionList()
            .add(Projections.alias(Projections.max("interestingVal"), "interestingVal"))
            .add(Projections.groupProperty("someval1"))
            .add(Projections.groupProperty("someval2"))
            .add(Projections.groupProperty("someval3"))
        );

然后,我想选择具有上述查询返回的interesting_val值的实体。像这样:

List<MyClass> resultList = sessionFactory.getCurrentSession().createCriteria(MyClass.class)
            .add(Subqueries.propertyIn("interestingVal", subq))
            .list();

不幸的是,subq子查询返回长度为4的对象数组列表,因为我有4个Projection值。所有投影值似乎都自动添加到SELECT子句中。这导致了 SQLSyntaxErrorException: ORA-00913: too many values

如何告诉我的第二个Criteria查询只使用Object数组中的第一个元素或仅检索子查询中的第一列?

1 个答案:

答案 0 :(得分:0)

而不是 propertyIn 尝试 propertiesIn

String[] vals = new String[]{"interestingVal", "someval1", "someval2", "someval3"};
List<MyClass> resultList = sessionFactory.getCurrentSession().createCriteria(MyClass.class)
            .add(Subqueries.propertiesIn(vals, subq))
            .list();