# Hibernate Objekte per Index ansprechen



## computersport (23. Feb 2011)

Hallo Community,

ist es möglich Hibernate-Objekte per Index anzusprechen.
Also nicht durch aufführen der Getter/Setter sondern,
dass ich sage das ich das erste Attribut haben will.

Das würde mir die möglichkeit geben einfach mit einer For-Schleife
ohne viel aufwand durch die Attribute zu gehen.

Danke im Voraus

compi


----------



## tfa (23. Feb 2011)

"Hibernate-Objekte" sind POJOs. Die Attribute lassen sich so ansprechen, wie du es programmiert hast. Hibernate hat damit nichts zu tun. Besonders viel Sinn seh ich allerdings nicht in diesem Anliegen.


----------



## SlaterB (23. Feb 2011)

intern muss Hibernate eh ne Menge arbeiten, wenn auch eher die SQL-Daten nach Namen zugeordnet werden?, 
eine Reihenfolge der Attribute gibt es eher nicht,
entfernt schon denkbar, dass Hibernate etwas dahingehend komfortabel anbieten könnte,

wenn nicht dann heißt das Standard-Zauberwort Reflection, getClass().getFields() usw.
vielleicht hilft
BeanUtils - Commons


----------



## computersport (1. Mrz 2011)

Ich hab es erstmal ein wenig unsauber gelöst, aber mein System muss erstmal nur funktionieren
optimieren kann ich später.

Habe eine Methode die alle Attribute einer POJO in eine Liste mit entsprechenden werten packt
und das entsprechend der Reihenfolge wie sie in der Datenbank und in meinem System ist.
Und kann so die einzelnen werte der POJO ansprechen.

Also erstmal danke und Thema erledigt.


----------



## computersport (20. Apr 2011)

Ich hab das jetzt per Reflection gelöst. Funktioniert super.
Für alle die ein ähnliches Problem haben hier der Quellcode:


```
public List<String> getPropertyNamesOfThePojo()
  {
    if (propertyNamesList == null)
    {
      propertyNamesList = new ArrayList<String>();
      try
      {
        Field[] felder = this.getClass().getDeclaredFields();
        for (Field fieldsOuterClass : felder) // Durchlaufen der Felder der OuterClass
        {
          if (fieldsOuterClass.isAnnotationPresent(EmbeddedId.class)) // Wenn Annotation des Attributs EmbeddedId ist
          {
            String embeddedIdAttributName = fieldsOuterClass.getName();
            Field[] felder2 = fieldsOuterClass.getType().getDeclaredFields();
            for (Field fieldsInnerClass : felder2) // Durchlaufen der Methoden der InnerClass
            {
              propertyNamesList.add(embeddedIdAttributName + "." + fieldsInnerClass.getName());
            }
          } else if (fieldsOuterClass.isAnnotationPresent(Embedded.class)) // Wenn Annotation des Attributs Embedded ist
          {
            String embeddedAttributName = fieldsOuterClass.getName();
            for (Field fieldsInnerClass : fieldsOuterClass.getClass().getFields()) // Durchlaufen der Methoden der InnerClass
            {
              propertyNamesList.add(embeddedAttributName + "." + fieldsInnerClass.getName());
            }
          } else if (fieldsOuterClass.isAnnotationPresent(Transient.class))
          {
            // Tue nichts
          } else if (!fieldsOuterClass.getName().equals("serialVersionUID"))
          {
            propertyNamesList.add(fieldsOuterClass.getName());
          }
        }
      } catch (Exception e)
      {
        Environment.getInstance().getJobLog().write(JobLog.ERROR, "PojoAbstractClass-PropertyNameList: " + e);
      }
    }
    return propertyNamesList;
  }
```


----------

