多対多関係に関連するテーブルを使用して選択するためにHibernate Criteriaを使用しようとしています。 n-mテーブルには、各テーブルのIDだけでなく、いくつかの追加の列があります。Hibernate Criteria - 多対多関係
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> criteria = builder.createQuery(Fornecedor.class);
Root<User> root = criteria.from(User.class);
criteria.select(root);
root.fetch("userRolesList");
List<User> users = em.createQuery(criteria).getResultList();
ユーザークラスでは、ユーザーロールリスト(n-mテーブル)にロールがあります。だから私はUser - > UserRoles - > Roleを持っています。私は、ユーザーの役割を印刷しようとすると、すべてのプロパティがFetchType.LAZY
としてマッピングされ、例えば、Hibernateはorg.hibernate.LazyInitializationExceptionが取り出さない役割を引き起こすスローします。
次のコードを変更するとします。
コード:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> criteria = builder.createQuery(Fornecedor.class);
Root<User> root = criteria.from(User.class);
criteria.select(root);
root.fetch("userRolesList");
root.fetch("userRolesList.role");
List<User> users = em.createQuery(criteria).getResultList();
その後、私が取得:
java.lang.IllegalArgumentExceptionが:このManagedTypeに 与えられた名前[userRolesList.role]で属性を見つけることができませんが[ユーザー]
私は多くのオプションを試しました結合のような状況は、まだそれを動作させることができませんでした。
パーフェクト!私は "インナーフェッチ"が欠けていました。私はルートから両方のフェッチをしようとしていました。完璧!ありがとう! – lfdajr