Mysql
 sql >> база данни >  >> RDS >> Mysql

Hibernate CriteriaBuilder, за да се присъедините към няколко таблици

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();

Предполагам, че сте изградили метамодела на JPA за вашите класове. Ако нямате метамодела или просто не искате да го използвате, просто заменете BuildDetails_.buildNumber а останалите с действителните имена на колоната като String , напр. "buildNumber" .

Имайте предвид, че не можах да тествам отговора (също го пишех без поддръжка на редактор), но той трябва да съдържа поне всичко, което трябва да знаете, за да изградите заявката.

Как да изградите своя метамодел? Разгледайте инструментите за хибернация за това (или се консултирайте с Как да генерирате JPA 2.0 metamodel ? за други алтернативи). Ако използвате maven, това може да бъде толкова просто, колкото просто да добавите hibernate-jpamodelgen -зависимост от пътя на вашия клас за изграждане. Тъй като в момента нямам наличен такъв проект, не съм толкова сигурен за следното (така че приемете това с недоверие). Може да е достатъчно просто да добавите следното като зависимост:

<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. Невалиден номер на параметъра:параметърът не е дефиниран. Вмъкване на данни

  2. Как да „дехексирате“ число в MySQL

  3. Какъв е заместителят на uniqueidentifier в Mysql

  4. MySQL LIKE с диапазон не работи

  5. Най-добрият начин за архивиране на MySQL база данни на живо