emp;//Getters//Setters} sebuah jabatan"/> emp;//Getters//Setters} sebuah jabatan">

Rumah >Java >javaTutorial >Bagaimana untuk menyesuaikan hasil pertanyaan JPA menggunakan fungsi agregat?

Bagaimana untuk menyesuaikan hasil pertanyaan JPA menggunakan fungsi agregat?

WBOY
WBOYke hadapan
2023-09-18 16:49:07952semak imbas

Bagaimana untuk menyesuaikan hasil pertanyaan JPA menggunakan fungsi agregat?

Kebanyakan masa, apabila kami menggunakan pertanyaan JPA, hasil yang diperoleh dipetakan kepada objek/jenis data tertentu. Tetapi apabila kami menggunakan fungsi agregat dalam pertanyaan, memproses keputusan kadangkala memerlukan kami menyesuaikan pertanyaan JPA.

Mari kita fahami (jabatan, pekerja) melalui contoh −

Dept.java

@Entity
public class Dept {
   @Id
   private Long id;
   private String name;
   @OneToMany(mappedBy = "dep")
   private List<Employee> emp;
   //Getters
   //Setters
}

Sesebuah jabatan boleh mempunyai seorang atau lebih pekerja, tetapi pekerja hanya boleh tergolong dalam satu jabatan.

Pekerja.java

@Entity
public class Employee {
   @Id
   private Long id;
   private Integer joiningyear;
   @ManyToOne
   private Dept dep;
   
   //Getters
   //Setters
}

Sekarang, jika kita ingin mendapatkan tarikh sertai dan bilangan pekerja dikumpulkan mengikut tarikh menyertai,

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
   // query methods
   @Query("SELECT e.joiningyear, COUNT(e.joiningyear) FROM Employee AS e GROUP BY e.joiningyear")
   List<Object[]> countEmployeesByJoiningYear();
}

Pertanyaan di atas berfungsi dengan baik, tetapi menyimpan nilai dalam bentuk Senarai Sebaliknya, kita boleh menyesuaikan pertanyaan JPA untuk memetakan hasil pertanyaan di atas ke dalam kelas Java. Kelas Java ini hanyalah POJO ringkas (Objek Java Lama Biasa) dan tidak perlu dianotasi dengan @Entity.

Terjemahan bahasa Cina bagi

CountEmployees.java

ialah:

CountEmployees.java

package com.tutorialspoint;
public class CountEmployees {
   private Integer joinyear;
   private Long totalEmp;
   
   public CountEmployees(Integer joinyear, Long totalEmp) {
      this.joinyear = joinyear;
      this.totalEmp = totalEmp;
   }
   //Getters
   //Setters
}

Kini, kami boleh menyesuaikan pertanyaan JPA kami seperti yang ditunjukkan di bawah −

@Query("SELECT new com.tutorialspoint.CountEmployees(e.joiningyear, COUNT(e.joiningyear)) " + "FROM Employee AS e GROUP BY e.joiningyear")
List<CountEmployees> countEmployeesByJoining();

Hasil pertanyaan pilihan di atas akan dipetakan ke kelas CountEmployees. Dengan cara ini kita boleh menyesuaikan pertanyaan JPA dan memetakan hasilnya ke kelas java.

Atas ialah kandungan terperinci Bagaimana untuk menyesuaikan hasil pertanyaan JPA menggunakan fungsi agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam