# Metadaten (Spaltenüberschrift) über EntityBean auslesen?



## nimo22 (3. Apr 2008)

Hallo,

habe nun eine Datamodel angelegt, welches Daten aus der Datenbank über eine Entity-Bean in eine Liste herausliest und  als "model" speichert. 


```
public DataModel getApplications() {
        EntityManager em = getEntityManager();
        try{
            Query q = em.createQuery("select object(o) from Customer as o");
            q.setMaxResults(batchSize);
            q.setFirstResult(firstItem);
            model = new ListDataModel(q.getResultList());
            return model;
        } finally {
            em.close();
        }
    }
```

Das funktioniert soweit. Nun will ich aus den hergeholten Daten auch deren Spaltenüberschriften wissen. Habe keine Funktion im DATAMODEL dafür gefunden. Über


```
ResultSet rs = stmt.executeQuery();
      ResultSetMetaData rsmd = rs.getMetaData();
      
      while (rs.next())
        {
            for (int i = 1; i <= colCount; i++)
            {
                String columnName = rsmd.getColumnName(i);
                string.append("<" + columnName + ">");

            }
            xml.append("</Row>");
        }
```

würde das Herauslesen der Metadaten (Spaltenüberschrift) funzen, ABER ich will doch net wieder den Umweg über ne direkte Datenbankverknüpfung haben, weil ich nen OR-Mapper benutze. 

Wie hol ich mir die Metadaten am elegantesten her??? Ich weiß, dass ich die Spaltenüberschriften auch bereits in der dementsprechenden Entity-Bean (Customer) habe..kann ich diese vielleicht irgendwie zum model (in ne liste) automatisch assoziieren?

danke vorab.


----------



## maki (3. Apr 2008)

Ähhm... weis nciht ob du da richtig bist.

Was haben Spaltennamen aus der DB in der View zu suchen wenn man Hibernate/JPA oder sonst ein ORM verwendet?
Gar nix! 

Es ist Aufgabe der View, sowas darzustellen


----------



## nimo22 (3. Apr 2008)

nun ja, unabhängig von der View (JSF)!!

Man muss doch die Metadaten aus der Datenbank herauslesen können, während er die Abfrage


```
Query q = em.createQuery("select object(o) from Customer as o");
model = new ListDataModel(q.getResultList());
return model;
```

macht. Oder stehen die Spaltenüberschriften der Daten in "q.getResultList()" ??? Die Spaltenüberschriften stehen ja auch in der Entity-Bean-Klasse..(kann man diese vielleicht über Annotations ansprechen?...kein Plan). Kann man statt "ResultList" nen "ResultSet" nehmen, um dann an die Metadaten ranzukommen???

Ich benötige die Spaltenüberschriften, 

erstens: 

um XML-Tags dafür zu erzeugen: Die Spaltenüberschriften sollen dann die XML-Tags repräsentieren. 
So muss ich nicht mühselig die Spaltennamen selber schreiben, ich geh dann einfach per Loop ne Liste durch...
Wenn ich ne JDBC-Abfrage mach, funktioniert das ja einwandfrei...


zweitens:

um in der View über einen Loop ne Tabelle zu erzeugen, ohne die Spaltenüberschriften manuell einzugeben..
(Ich weiss, per JSF geht das mit der TagLib SQL...aber ich will in der JSF nicht ne Datenbankverknüpfung machen 
um dann die Tabellenüberschriften zu bekommen..)


Du sagst:



> Was haben Spaltennamen aus der DB in der View zu suchen wenn man Hibernate/JPA oder sonst ein ORM verwendet?



Spaltennamen sollen doch in der View (JSF) angezeigt werden..die muss ich doch auch leider manuell angeben., oder?

Du sagst:



> Es ist Aufgabe der View, sowas darzustellen


Es soll doch nicht Aufgabe der View sein, herauszufinden, zu welcher Spaltenüberschrift die Daten der jeweiligen Spalte gehören. 
[/code]


----------



## maki (4. Apr 2008)

Die Namen der Spalten sind für die View unwichtig, wichtig ist der Name der Property und was die View als Header für diese Property  anzeigen soll.

Spaltennamen sind normalerweise nicht schön bzw. sinnvoll für User(CUSTOMER_ID_FK, DOCUMENT_ID_PK, ...), da sie zu technisch sind, ausserdem will man normalerweise in der Lage sein, die Header zu lokalisieren.

Jedenfalls bist du auf dem Holzweg imho 

Solltest mehr OO denken, Objekte und Properties anstatt Tabellen und Spaltennamen.


----------

