Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hibernate CriteriaBuilder untuk bergabung dengan beberapa tabel

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery query = cb.createQuery(/* Your combined target type, e.g. MyQueriedBuildDetails.class, containing buildNumber, duration, code health, etc.*/);

Root<BuildDetails> buildDetailsTable = query.from(BuildDetails.class);
Join<BuildDetails, CopyQualityDetails> qualityJoin = buildDetailsTable.join(CopyQualityDetails_.build, JoinType.INNER);
Join<BuildDetails, DeploymentDetails> deploymentJoin = buildDetailsTable.join(DeploymentDetails_.build, JoinType.INNER);
Join<BuildDetails, TestDetails> testJoin = buildDetailsTable.join(TestDetails_.build, JoinType.INNER);

List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(buildDetailsTable.get(BuildDetails_.buildNumber), "1.0.0.1"));
predicates.add(cb.equal(buildDetailsTable.get(BuildDetails_.projectName), "Tera"));

query.multiselect(buildDetails.get(BuildDetails_.buildNumber),
                  buildDetails.get(BuildDetails_.buildDuration),
                  qualityJoin.get(CodeQualityDetails_.codeHealth),
                  deploymentJoin.get(DeploymentDetails_.deployedEnv),
                  testJoin.get(TestDetails_.testStatus));
query.where(predicates.stream().toArray(Predicate[]::new));

TypedQuery<MyQueriedBuildDetails> typedQuery = entityManager.createQuery(query);

List<MyQueriedBuildDetails> resultList = typedQuery.getResultList();

Saya berasumsi Anda membangun metamodel JPA untuk kelas Anda. Jika Anda tidak memiliki metamodel atau Anda tidak ingin menggunakannya, cukup ganti BuildDetails_.buildNumber dan sisanya dengan nama kolom yang sebenarnya sebagai String , misalnya "buildNumber" .

Perhatikan bahwa saya tidak dapat menguji jawabannya (juga menulisnya tanpa dukungan editor), tetapi setidaknya harus berisi semua yang perlu Anda ketahui untuk membuat kueri.

Bagaimana cara membangun metamodel Anda? Lihat hibernate tooling untuk itu (atau lihat Cara menghasilkan metamodel JPA 2.0 ? untuk alternatif lain). Jika Anda menggunakan pakar, itu bisa sesederhana hanya menambahkan hibernate-jpamodelgen -ketergantungan ke classpath build Anda. Karena saya tidak memiliki proyek seperti itu sekarang, saya tidak begitu yakin tentang yang berikut (jadi ambillah dengan sebutir garam). Mungkin cukup untuk menambahkan yang berikut ini sebagai ketergantungan:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-jpamodelgen</artifactId>
  <version>5.3.7.Final</version>
  <scope>provided</scope> <!-- this might ensure that you do not package it, but that it is otherwise available; untested now, but I think I used it that way in the past -->
</dependency>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih baris tertentu dari tabel mysql

  2. Bagaimana cara mencocokkan email atau telepon dengan Elasticsearch?

  3. Panduan Merancang Basis Data Untuk Sistem Jejaring Sosial Di MySQL

  4. Contoh Injeksi PHP/MySQL

  5. Bisakah Anda menggunakan beberapa kolom untuk kueri yang tidak ada?