私の状況: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);
しかし、どうすればこれを行う必要があるのか 絶対にわかりません。
すべての助けに感謝します!よろしく!