0

この種の SQL に対して CriteriaBuilder を使用してクエリを作成したいと思います。

SELECT myDefinedAlias.id, myDefinedAlias.name, myDefinedAlias.aFieldForFK select from Person as myDefinedAlias where myDefinedAlias.name = ?1

これのエイリアスを定義するにはどうすればよいですか?

エイリアスなしでクエリを作成できますが、エイリアスを定義できません...

CriteriaQuery<Person> cq = criteriBuilder.createQuery(Person.class);
Root<Person> person = cq.from(Person.class);
cq = cq.select(person);
cq = cq.where(criteriaBuilder.equal(person.get(Person_.name), "Chivas")))

これは、QueryHints、バッチ フェッチに必要です。

.setHint(QueryHints.BATCH, "myDefinedAlias.aFieldForFK.itsNestedAttribute"); 

私は立ち往生しており、私の問題に関して何も見つかりませんでした。誰?

よろしく

4

2 に答える 2

0

あなたはこれについて間違った方法で進んでいると思います。JPA には、sql-statement を生成するときに使用する sql-statement-aliases が必要です。ネストされたクエリ ヒントが機能するには、エンティティで関係を指定する必要があります。たとえば、Person エンティティに House エンティティへの OneToMany マッピングがあり、Person クラスのプロパティ名がliveInHouses であるとします。クエリ ヒントは、.setHint(QueryHints.BATCH, "Person.livedInHouses") のようになります。データベースに存在するFKを使用することはほぼ不可能ですが、JPAのエンティティの関係として注釈が付けられていません。

于 2012-04-27T21:27:48.000 に答える