【发布时间】:2017-05-30 21:22:37
【问题描述】:
我正在尝试使用 Hibernate Criteria 进行选择,使用多对多关系中相关的表。 n-m 表有一些额外的列,而不仅仅是每个表的 id。
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();
在 User 类中,我有具有角色的 userRolesList(n-m 表)。所以我有用户-> 用户角色-> 角色。每个属性都映射为 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 [User] 上的给定名称 [userRolesList.role]
我已经尝试了很多选项来解决这种情况,比如加入,但仍然无法成功。
【问题讨论】:
标签: java hibernate orm many-to-many