如何使用hibernate检索表的所有主键?

时间:2013-07-29 02:50:58

标签: java mysql hibernate java-ee

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

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

使用以下代码hibernate返回对象但我需要它返回一个主键列表以将它们存储在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 list应该是

[1,2]

3 个答案:

答案 0 :(得分:4)

您只需创建一个返回所需字段的HQL查询:

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

假设您的主键字段名为idMyTable是您的实体。您也可以使用CriteriaProjections

执行此操作

答案 1 :(得分:3)

通常有办法实现这一目标 1)使用Criteria API 2)使用HQL 3)使用本机查询

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

1)使用Criteria 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();

答案 2 :(得分:0)

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

public interface MyRepository extends JpaRepository<MyTable, KeyType> {

    @Query("select mt.id from MyTable mt")
    List<KeyType> getAllIds();
}