как запросить определенные поля в критериях гибернации - PullRequest
2 голосов
/ 30 августа 2010

Мне нужно выбрать только определенные поля вместо всех полей. У всех моих таблиц есть аудиторские поля (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);

Ответы [ 2 ]

1 голос
/ 31 августа 2010

Используйте 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]);
}

Кстатиимя вашей сущности "Свойство" может вызвать путаницу / конфликт с существующим классом Hibernate, особенно если вы используете Критерии.

0 голосов
/ 31 декабря 2015

вы должны использовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...