Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hibernate CriteriaBuilder để tham gia nhiều bảng

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

Tôi giả sử bạn đã xây dựng siêu mô hình JPA cho các lớp học của mình. Nếu bạn không có siêu mô hình hoặc đơn giản là bạn không muốn sử dụng nó, chỉ cần thay thế BuildDetails_.buildNumber và phần còn lại có tên thực của cột là String , ví dụ. "buildNumber" .

Lưu ý rằng tôi không thể kiểm tra câu trả lời (cũng đang viết nó mà không có sự hỗ trợ của trình chỉnh sửa), nhưng ít nhất nó phải chứa mọi thứ bạn cần biết để tạo truy vấn.

Làm thế nào để xây dựng siêu mô hình của bạn? Hãy xem công cụ ngủ đông cho điều đó (hoặc tham khảo Cách tạo siêu mô hình JPA 2.0 ? cho các lựa chọn thay thế khác). Nếu bạn đang sử dụng maven, có thể đơn giản chỉ cần thêm hibernate-jpamodelgen -phụ thuộc vào đường dẫn xây dựng của bạn. Vì tôi không có bất kỳ dự án nào như vậy hiện có sẵn nên tôi không chắc chắn lắm về những điều sau đây (vì vậy hãy xem xét điều đó với một chút muối). Chỉ cần thêm những thứ sau làm phụ thuộc là đủ:

<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. Thay đổi tiêu đề cột SQL thông qua truy vấn

  2. Công cụ lưu trữ cho bảng không hỗ trợ sửa chữa. InnoDB hay MyISAM?

  3. Cách chọn giá trị từ JSON trong mysql

  4. Làm cách nào tôi có thể thực hiện so sánh chuỗi phân biệt chữ hoa chữ thường SQL trên MySQL?

  5. chèn vào thủ tục được lưu trữ với các tham số MYSQL không hoạt động