我只需要获取特定的字段而不是所有字段。我的所有桌子都有审计领域(4)。我希望在选择上省略这一点。如何从映射中做到这一点。还有其他办法吗?。
Criteria criteria = session.createCriteria(Property.class, "property")
.createAlias("property.propertyType", "type").createAlias(
"property.propertyConcern", "propertyConcern",
CriteriaSpecification.LEFT_JOIN).createAlias(
"propertyConcern.concern", "concern",
CriteriaSpecification.LEFT_JOIN)
.setResultTransformer(
CriteriaSpecification.DISTINCT_ROOT_ENTITY);
答案 0 :(得分:1)
使用ProjectionList仅返回您所追踪的字段。
Criteria criteria = session.createCriteria(Property.class, "property")
.setProjection(Projections.projectionList()
.add(Projections.property("property.field1"))
.add(Projections.property("concern.field2"))
/*etc*/)
/*etc etc etc*/;
结果是一个数组数组。
for (Object result : criteria.list()) {
final Object[] fields = (Object[]) result;
log.info("property.field1={}, concern.field2={}", fields[0], fields[1]);
}
顺便说一句,您的实体名称“Property”可能会导致与现有Hibernate类混淆/冲突,尤其是因为您使用的是Criteria。
答案 1 :(得分:0)
你必须使用Transformers.aliasToBean(Property.class)
..
ProjectionList properties = Projections.projectionList();
properties.add(Projections.property("p.id"), "id");//"id" should match with the property name to call setters
properties.add(Projections.property("p.fname"), "fname");
properties.add(Projections.property("s.lname"), "lname");
criteria.setProjection(properties);
criteria.setResultTransformer(Transformers.aliasToBean(Student.class));
List<Student> students = (List<Student>) criteria.list();