在将Hibernate从4.3.11升级到5.2.12的范围内,我们将从hibernate原生标准转移到JPA标准查询,并发现了不同的行为。以前,hibernate标准使用一个带有联接的查询来获取一对多的关联实体,但是JPA使用单独的查询来获取每个根实体的关联实体。因此,我可以以某种方式告诉JPA条件,在默认情况下使用联接而不是对每个根实体的单独查询来在单个查询中获取关联实体吗?代码示例:
CriteriaBuilder builder = c
我的程序有一个用户和一个安全的角色配置,这两个模型之间存在多对多关系。当我试图将一个新用户和他的m- to -m关系保存在一个单独的名为"user_roles“的表中时,session.save()函数出现以下错误: org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions. Collection : [com.session.library.libraryofbooks.model.Role.employees#1] 下面是我的用户模型代码:
是否有可能将像select x from Clazz x这样的JPQL标记转换为CriteriaQuery对象,在该对象中,我可以检查查询的根是否为Clazz (使用CriteriaQuery.getRoots),或者以不同的方式执行相同的操作(而不是转换为CriteriaQuery)?JPA文档非常简单(例如,CriteriaBuilder的类注释说“返回一个CriteriaBuilder实例以创建CriteriaQuery对象。”-- 10或20句话和更多的引用不会