Pertanyaan JPQL: Jenis objek apa yang berisi daftar hasil ketika menanyakan beberapa kolom?


Saya mencoba melakukan sesuatu yang mudah sekali di PHP & Co: SELECT COUNT (x) sebagai numItems, AVG (y) sebagai rata-rata, ... FROM Z

Dalam PHP saya akan mendapatkan array sederhana seperti [{numItems: 0, average: 0}] yang bisa saya gunakan seperti ini:

echo "Number of Items: " . $result[0]['numItems'];

Biasanya dalam JPQL Anda hanya menanyakan objek tunggal atau kolom tunggal dan mendapatkan jenis Daftar, misalnya List<SomeEntity> atau List<Long>. Tapi apa yang Anda dapatkan, ketika mempertanyakan beberapa kolom?


5
2018-05-29 21:41


asal


Jawaban:


Anda mendapatkan Object[] (atau a List<Object[]>). Dari bagian 4.8.1 Jenis Hasil Klausa SELECT spesifikasi JPA 1.0:

Jenis hasil dari klausa SELECT   didefinisikan oleh tipe hasil dari   itu select_expressions terkandung dalam   saya t. Saat berganda select_expressions   digunakan dalam klausa SELECT,   hasil dari query adalah tipe    Object[], dan elemen-elemen dalam ini   hasil sesuai untuk   urutan spesifikasi mereka di   PILIH klausa dan dalam tipe ke   jenis hasil masing-masing    select_expressions.

Jika Anda ingin mengetik kuat, Anda dapat menggunakan ekspresi konstruktor dalam klausa SELECT. Dari bagian 4.8.2 Konstruktor Ekspresi dalam Klausa SELECT:

Konstruktor dapat digunakan di   PILIH daftar untuk mengembalikan satu atau lebih Java   contoh. Kelas yang ditentukan adalah tidak   wajib menjadi entitas atau menjadi   dipetakan ke database. Itu   nama konstruktor harus sepenuhnya   berkualitas.

Jika nama kelas entitas ditentukan   dalam klausa SELECT NEW, the   hasil instance entitas berada di   negara baru.

SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count)
FROM Customer c JOIN c.orders o
WHERE o.count > 100

5
2018-05-29 21:51



Anda juga dapat menggunakan Tuple dan mengembalikan daftar Tuple (List<Tuple>) yang dapat Anda gunakan sebagai daftar Peta.


0
2018-04-08 02:52