2010-08-30 3 views
2

Je n'ai besoin de récupérer que des champs spécifiques au lieu de tous les champs. Toutes mes tables ont des feilds d'audit (4). Je veux que cela soit ommitted sur la sélection. comment faire cela à partir de la cartographie. Est-ce qu'il y a un autre moyen?.comment interroger des champs spécifiques dans les critères d'hibernation

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); 

Répondre

1

Utilisez un ProjectionList pour renvoyer uniquement les champs que vous recherchez.

Criteria criteria = session.createCriteria(Property.class, "property") 
    .setProjection(Projections.projectionList() 
     .add(Projections.property("property.field1")) 
     .add(Projections.property("concern.field2")) 
     /*etc*/) 
    /*etc etc etc*/; 

Le résultat est un tableau de tableaux.

for (Object result : criteria.list()) { 
    final Object[] fields = (Object[]) result; 
    log.info("property.field1={}, concern.field2={}", fields[0], fields[1]); 
} 

Par ailleurs, le nom de votre entité « propriété » pourrait causer de la confusion/conflit avec la classe existante Hibernate, d'autant plus que vous utilisez des critères.

+0

Mais, Encore une fois je dois itérer dans les articles retournés pour former hierachy objet. Au lieu de cela, y a-t-il un autre moyen? – Jothi

0

vous devez utiliser 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(); 
Questions connexes