我需要检索表的所有主键并将它们放在列表中。 到目前为止我找到的任何方法都让我将每条记录检索为一个对象,这迫使我分别检索它们的主键并将它们添加到列表中。
是否有其他方法可以检索表的主键并将其添加到列表中?
使用以下代码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]
答案 0 :(得分:4)
您只需创建一个返回所需字段的HQL查询:
session.createQuery("SELECT mt.id FROM MyTable mt").list();
假设您的主键字段名为id
,MyTable
是您的实体。您也可以使用Criteria
和Projections
。
答案 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();
}