【问题标题】:Hibernate Restrictions.in() only accepts propertyName as StringHibernate Restrictions.in() 只接受 propertyName 作为 String
【发布时间】:2013-09-04 09:32:11
【问题描述】:

我有一个 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() 的第一个参数是字符串类型。我不能在那里放置硬编码的“id”,因为我不知道属性名是什么。 所以我不知道如何在那里将 id 属性作为字符串获取。 我看到了 Projections.id(),但我不确定是否可以使用它来获取它作为字符串。

【问题讨论】:

    标签: java hibernate criteria


    【解决方案1】:

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

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

    这个sn-p的来源:here

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 2011-08-19
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多