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

标签 java hibernate criteria

我有一个 id 列表:

List<Object> ids;

我需要在条件查询中使用它来获取具有 ids 包含的 id 的所有行。

我现在拥有的和有效的:

    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 属性作为字符串。 我看到了 Projections.id(),但我不确定是否可以使用它来将其作为字符串获取。

最佳答案

有了这个solution您可以检索实体的 id 字段的名称。如果您使用注释,您可以将其变得更短,如here所述。 。如果您不使用复合主键,您也可以使用

ClassMetadata classMetadata = getSessionFactory().getClassMetadata(myClass); 字符串identifierPropertyName = classMetadata.getIdentifierPropertyName();

此片段的来源:here

关于java - Hibernate Restrictions.in() 只接受 propertyName 作为 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610219/

相关文章:

java - 复杂的多模块 Maven 项目构建失败

java - 我该如何解决 MongoWaitQueueFullException?

java - 如何使用 java 模型正确设置 hibernate 持久性

sql - Hibernate Criteria 查询中的 Coalesce 等价物?

java ExecutorService 如何处理超时

java - OpenCV Java RGB还是HSV?

java - 实现缓存 Spring 方法级注解 vs Hibernate 二级缓存

java - 由 : javax. persistence.TransactionRequiredException 引起:在带有 Spring JTA 事务的 Weblogic 上

hibernate - 急于加载时,Grails条件查询将返回同一对象的多个副本

java - Hibernate Criteria/Criterion with Restrictions 等于 POJO 的非空值