sql >> データベース >  >> RDS >> Mysql

複数のテーブルを結合するためのHibernateCriteriaBuilder

    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"

    答えをテストすることはできませんでしたが(エディターのサポートなしで書いていた)、少なくともクエリを作成するために知っておく必要のあるすべてのものが含まれている必要があります。

    メタモデルを構築する方法は? hibernateツール をご覧ください そのために(またはJPA2.0メタモデルを生成する方法を参照してください? 他の選択肢について)。 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. 緯度と経度の最も近い場所

    2. 重複キーの更新について-複数の列

    3. MySQLまたはPostgreSQLにTEXTフィールドがある場合、それを別のテーブルに配置する必要がありますか?

    4. SQL Serverのストアドプロシージャの列情報を返す:sp_sproc_columns