1

JPA Criteria Builderを使用して2つのテーブルを結合しようとしています、CountryおよびGeotarget。同等のものSQL

Select distinct Country.* from Country Inner Join Geotarget
 where Geotarget.Country_ID = Country.ID;

私のコードは

     CriteriaBuilder criteriaBuilder getTransactionalEntityManager().getCriteriaBuilder();
    CriteriaQuery<Country> criteriaQuery = criteriaBuilder.createQuery(Country.class);
    Root<Country> root = criteriaQuery.from(Country.class);
    Join<Geotarget, Country> geotargetJoin = root.join(Geotarget_.country, JoinType.INNER);
    Predicate predicate = criteriaBuilder.equal(Country_.id,Geotarget_.country);
    criteriaQuery = criteriaQuery.where(predicate);
    criteriaQuery.select(Country.class).distinct(true);
    return findAllObjects(criteriaQuery);

しかし、間違っています。場所によっては解析すらしません。特に、結合行、または2つのフィールドを比較したくないように見えるequalsの原因のコードを見つけることができないようです。正しいコードで私を助けてくれませんか。

4

1 に答える 1

1

述語は必要ないと思います。結合自体は、GeoTarget.Country_ID = Country.ID を実行する必要があります。したがって、次のように修正します。

CriteriaBuilder criteriaBuilder getTransactionalEntityManager().getCriteriaBuilder();
CriteriaQuery<Country> criteriaQuery = criteriaBuilder.createQuery(Country.class);
Root<Country> root = criteriaQuery.from(Country.class);
Join<Geotarget, Country> geotargetJoin = root.join(Geotarget_.country); // Default is inner
criteriaQuery.select(Country.class).distinct(true);
return findAllObjects(criteriaQuery);
于 2013-01-15T14:21:16.590 に答える