Hibernate / JPA - Spaltenname von Query (Select) bekommen

internet

Top Contributor
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

Java:
    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?
 
JPA 2.1
Java:
Map<Integer, Integer> userInfo = entityManager.createQuery("""
    select
       id,
       firstname
    from
       UserInfo
    """, Tuple.class)
.getResultStream()
.collect(
    Collectors.toMap(
        tuple -> ((Number) tuple.get("id")).intValue(),
        tuple -> tuple.get("firstname", String.class)
    )
);
Geht in die Richtung, was ich brauche.
Aber warum 2x Integer?
Java:
Map<Integer, Integer> userInfo

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

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

Java:
  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
 
JPA 2.1

Geht in die Richtung, was ich brauche.
Aber warum 2x Integer?
Java:
Map<Integer, Integer> userInfo

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

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

Java:
  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
Das funktioniert nicht und "dynamisch" ist auch nicht richtig, du kennst ja deine Abfrage.
 

Zurück
Oben