问题描述
应读取表Person(具有name、firstname和age)的每一行.
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);