1

I have next classes:

@Entity
@Table(name="A")
public class A implements Serializable{

    @Id
    @Column(name="a_id")
    private long aId;

    @ManyToOne
    @JoinColumn(name="b_id")    
    private B b;
}

@Entity
@Table(name="b")
public class B implements Serializable{

    @Id
    @Column(name="b_id")
    private long bId;

    @Column(name="b_name")
    private String name;

    @Column(name="b_age")
    private String age;

    @OneToMany(mappedBy="b")
    private Set<A> a;        
}

I have getters and setters for this classes.

when I try execute next Criteria

session.createCriteria(A.class, "a_table")
             .createAlias("a_table.b", "b_table")
             .add(Restrictions.eq("b_table.age", "11"))
             .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
             .list();

In SQL generated by hibernate I have all fields from B (I mean field "name" too). How I can make to Hibernate bring only needed fields.

In case that in criteria exists many aliases to many tables, it can increase execution time. Thank you.

Abimaran Kugathasan
  • 31,165
  • 11
  • 75
  • 105
Anton
  • 1,051
  • 1
  • 9
  • 21

1 Answers1

0

Try using projections. Maybe something like this:

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 list = cr.list();

bladefist
  • 148
  • 1
  • 12