How to return an entity with chosen columns using Criteria

Rodrigo Zero picture Rodrigo Zero · Jun 4, 2009 · Viewed 40.9k times · Source

I'm really new with Hibernate. I want a List<User> using hibernate criteria, but only with fields User id and name filled up. Is that possible? Something like the query shown below:

SELECT user.id, user.name FROM user

Regards.

Answer

Matt Solnit picture Matt Solnit · Jun 4, 2009

This is exactly what projections are for. Here is an example:

  Criteria cr = session.createCriteria(User.class)
    .setProjection(Projections.projectionList()
      .add(Projections.property("id"), "id")
      .add(Projections.property("Name"), "Name"))
    .setResultTransformer(Transformers.aliasToBean(User.class));

  List<User> list = cr.list();

In fact, if you look at the documentation for "lazy property fetching" they specifically say:


"A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a preferred solution."


By the way, there is a related question that you may also be interested in: Hibernate Query By Example and Projections