如何使用 Hibernate Criteria 懒惰地获取字段

2022-01-20 00:00:00 lazy-loading orm fetch java Hibernate

应读取表Person(具有namefirstnameage)的每一行.

Each row of the table Person (having name, firstname and age) shall be read.

EntityManager em = emf.createEntityManager();
Session s = (Session) em.getDelegate();
Criteria criteria = s.createCriteria(Person.class);
criteria.setFetchMode("age", FetchMode.SELECT);

但是 SQL 显示

Hibernate:
    select
        person0_.name,
        person0_.firstname,
        person0_.age
    from 
        SCOPE.PERSON person0_

如何让年龄变得懒惰ONLY为Criteria??

How to let the age be lazy ONLY for the Criteria??

推荐答案

我认为惰性模式只对关联才有意义.如果您访问的是普通表,它将加载所有字段.

I think that lazy mode only makes sense with associations. If you are accessing a plain table it will load all the fields.

如果您希望 age 字段不出现在 SQL 中,因此不被加载到内存中,请使用投影:

If you want the age field not to appear in the SQL and so not being loaded into memory then use projections:

Criteria crit = session.createCriteria(Person.class);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("name"));
projList.add(Projections.property("firstname"));
crit.setProjection(projList);

相关文章