1

我需要检索表的所有主键并将它们放在一个列表中。到目前为止,我发现的任何方法都可以让我将每条记录作为一个对象检索,这迫使我分别检索它们的主键并将它们添加到列表中。

有没有其他方法可以检索表的主键并将它们添加到列表中?

使用以下代码休眠返回对象,但我需要它返回主键列表以将它们存储在 pk 列表中。

            List pk = new ArrayList():
            Criteria criteria = session.createCriteria(MyTable.class, "mytable");
            pk = criteria.list();

如果 mytable 如下

id name value
1  a      z4
2  f      o2

pk列表应该是

[1,2]
4

3 回答 3

4

您可以简单地创建一个返回所需字段的 HQL 查询:

session.createQuery("SELECT mt.id FROM MyTable mt").list();

假设您的主键字段已命名id并且MyTable是您的实体。您也可以使用Criteria和来完成Projections

于 2013-07-29T02:59:11.607 回答
4

通常有方法可以实现 1) 使用 Criteria API 2) 使用 HQL 3) 使用 Native Query

从上面的休眠查询方式,对我们更好的(1)和(2),第三种方式依赖于数据库的类型。

1) 使用标准 API

Criteria criteria = session.createCriteria(MyTable.class, "mytable");
criteria.setProjection( Projections.projectionList().add( Projections.property("mytable.id"), "mytable.id"));

List<Long> ids=criteria.list();

2) 使用 HQL

解决方案已经由Sotirious

3) 使用原生查询

session.createSQLQuery(" SELECT mytable.id FROM MyTable mytable ").addScalar("ID","Hibernate.LONG").list();
于 2013-07-29T13:50:22.160 回答
1

另一种方法是直接在存储库(Spring JpaRepository)方法上使用查找器查询。

public interface MyRepository extends JpaRepository<MyTable, KeyType> {

    @Query("select mt.id from MyTable mt")
    List<KeyType> getAllIds();
}
于 2019-10-09T13:25:24.483 回答