Hibernate Restrictions.in()只接受propertyName作为String

时间:2013-09-04 09:32:12

标签: java hibernate criteria

我有一个ID列表:

List<Object> ids;

我需要在条件查询中使用它来获取ID为ids的所有行。

我现在所做的工作:

    if (ids.size() > 0) {
        for (Object id : ids) {
            preparedResults.add((T)sessionMngr.getSession().
                    createCriteria(rowType).add(Restrictions.idEq(id))
                    .uniqueResult());
        }
    }

所以我逐个获取它们,这不是最佳的,但是我首先尝试了类似下面的内容来获取它们在一个查询中,但不知道该放在 ???

            preparedResults.addAll(sessionMngr.getSession().
                createCriteria(rowType).
                add(Restrictions.in(???, ids)).list());

Restrictions.in()的第一个参数是String类型。我不能把硬编码的“id”放在那里,因为我不知道属性是什么。 所以我不知道如何将id属性作为String获取。 我看到了Projections.id(),但我不确定我是否可以使用它来将它作为字符串。

1 个答案:

答案 0 :(得分:3)

使用此solution,您可以检索实体的ID字段的名称。如果您使用注释,则可以使其更短,如here所述。如果您不使用复合主键,也可以使用

ClassMetadata classMetadata = getSessionFactory().getClassMetadata(myClass); string identifierPropertyName = classMetadata.getIdentifierPropertyName();

此代码段的来源:here