# Hibernate / JPA - Spaltenname von Query (Select) bekommen



## internet (12. Jul 2021)

Hi, 

Ich würde gerne von einer JPA - Abfrage die Spaltennamen bekommen und in einer Map den Spaltenname + Wert speichern:

Im Moment speichere ich nur den Wert. Ich möchte dann aber sowas wie: 
- Name: ID
- Value: 1

speichern


```
Query query1 = session.createQuery("select id, firstName from UserInfo");
    List<Object[]> collection1 = query1.getResultList(); //collection of object arrays
    
     for(Object[] user: collection1)
     {
         System.out.println("Id : " + (Integer)user[0]);
         System.out.println("First Name : " + (String)user[1]);
         System.out.println();
     }
```

Wie kann ich das machen?


----------



## mrBrown (12. Jul 2021)

Der schöne Weg wären Constructor Expressions, damit bekommst du dann ein vernünftiges Objekt statt einem Array zurück.


----------



## Oneixee5 (12. Jul 2021)

*


----------



## internet (12. Jul 2021)

JPA 2.1


Oneixee5 hat gesagt.:


> ```
> Map<Integer, Integer> userInfo = entityManager.createQuery("""
> select
> id,
> ...


Geht in die Richtung, was ich brauche.
Aber warum 2x Integer?

```
Map<Integer, Integer> userInfo
```

Ich bräuchte
String.class = Spaltenname
Object.class = Wert

2) Ich bräuchte alle Felder (dynamisch), also nicht explizit das:


```
Collectors.toMap(
        tuple -> ((Number) tuple.get("id")).intValue(),
        tuple -> tuple.get("firstname", String.class)
    )
```

Wie kann ich das machen?

3) Was ist Tuple.class ? Meine Spalten kommen aus unterschiedlichen Entities


----------



## Oneixee5 (12. Jul 2021)

internet hat gesagt.:


> JPA 2.1
> 
> Geht in die Richtung, was ich brauche.
> Aber warum 2x Integer?
> ...


Das funktioniert nicht und "dynamisch" ist auch nicht richtig, du kennst ja deine Abfrage.


----------



## internet (12. Jul 2021)

Die Abfrage / Felder werden Adoc erzeugt (User kann auswählen, welche Felder er benötigt).


----------



## LimDul (12. Jul 2021)

Dann weißt du doch an der Stelle schon, welche Felder kommen? Die würde ich daraus einfach mitnehmen.


----------

