1

私の状況:AuditDetail というデータテーブルがあります。このテーブルは、別のテーブル AuditHead との ManyToOne 接続にあります。Primefaces データテーブルにデータを表示します。私の問題は、並べ替えとフィルタリングにあります。ウィッチが AuditHead テーブルにあるフィールドをソートしたい場合、エラーが発生しました: そのようなフィールド例外はありません。関連コード:

public List<AuditDetail> load(int first, int pageSize, String sortField, SortOrder     sortOrder, Map<String,String> filters) {

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<AuditDetail> cq = cb.createQuery(AuditDetail.class);
Root<AuditDetail> from = cq.from(AuditDetail.class);
CriteriaQuery<AuditDetail> select = cq.select(from);

これは AuditDetail フィールドと完全に連携しますが、AuditHead からフィールドに到達する方法がわかりません。NamedQueries を使用する場合、auditDetail.headId と簡単に言えますが、CriteriaQuery を使用する場合、どのように AuditHead フィールドを取得できますか? 以前は NamedQueries を使用していましたが、このコードは完全に機能します。

filterBy="#{log.headId.tableName}" sortBy="#{log.headId.tableName}"

私はここにいます。もう何もわからないので、すべてを試したと思います。例えば:

Fetch<AuditDetail, AuditHead> fetch = from.fetch(AuditDetail_.headId, JoinType.LEFT);

しかし、どうすればこれを行う必要があるのか​​ 絶対にわかりません。

すべての助けに感謝します!よろしく!

4

0 に答える 0