如何从 Hibernate 中的 projectionCriteria 中删除所有 SubcriteriaList (Java) - 防止使用左连接
How to remove all SubcriteriaList from projectionCriteria in Hibernate (Java) - prevent from using left join
我正在使用 Hibernate 和 dto、dao 设计模式 (Java)。
我有一个实体 class 和其中的属性,它们是用 @ManyToOne
注释定义的。
我想创建一个计数查询和 "tell" 休眠 "DO NOT JOIN" 与 @ManyToOne
个表
创建计数查询时:
(Long) crit.setProjection(Projections.count("id")).uniqueResult();
hibernate 执行的 sql 里面有 left join
.
即使我在实体 class 的 @Id
注释上 明确地 计数。
实际查询出现的是所有 "other tables".
的 LEFT JOIN
Hibernate 构建的 SQL 查询效率不高,因为在设置 @ManyToOne
时没有理由创建左连接。
在尝试和阅读有关休眠的内容后,我发现了 FetchMode
但即使设置 FetchMode.LAZY
.setFetchMode("brand", FetchMode.LAZY)
来自hiberante的Sql加入其中。
我还附上了显示所有 SubcriteriaList 的调试照片
在 projectionCriteria 下。
我如何告诉 Hibernate 不要 从实体 class 左连接表?
(没有自己写 SQL 查询) ?
public Response findAll() {
Criteria crit = getDtoCriteria();
}
public Criteria getDtoCriteria() {
return getDtoCriteria(getDtoClass(), getSession());
}
public Criteria getDtoCriteria(Class clazz, Session session) {
Criteria crit = createEntityCriteria(session);
setProjecttionForDto(crit, true, clazz);
return crit;
}
这都是我的子标准
[Subcriteria(bran*******ance:bran*******ance), Subcriteria(buc*****:buc*****), Subcriteria(br****:br****), Subcriteria(dyn***:dyn***), Subcriteria(dyna*****.user:user)]
尝试使用 FetchMode.SELECT
代替:
(Long) crit.setFetchMode("brand",FetchMode.SELECT)
.setProjection(Projections.count("id"))
.uniqueResult();
我正在使用 Hibernate 和 dto、dao 设计模式 (Java)。
我有一个实体 class 和其中的属性,它们是用 @ManyToOne
注释定义的。
我想创建一个计数查询和 "tell" 休眠 "DO NOT JOIN" 与 @ManyToOne
个表
创建计数查询时:
(Long) crit.setProjection(Projections.count("id")).uniqueResult();
hibernate 执行的 sql 里面有 left join
.
即使我在实体 class 的 @Id
注释上 明确地 计数。
实际查询出现的是所有 "other tables".
Hibernate 构建的 SQL 查询效率不高,因为在设置 @ManyToOne
时没有理由创建左连接。
在尝试和阅读有关休眠的内容后,我发现了 FetchMode
但即使设置 FetchMode.LAZY
.setFetchMode("brand", FetchMode.LAZY)
来自hiberante的Sql加入其中。
我还附上了显示所有 SubcriteriaList 的调试照片 在 projectionCriteria 下。
我如何告诉 Hibernate 不要 从实体 class 左连接表? (没有自己写 SQL 查询) ?
public Response findAll() {
Criteria crit = getDtoCriteria();
}
public Criteria getDtoCriteria() {
return getDtoCriteria(getDtoClass(), getSession());
}
public Criteria getDtoCriteria(Class clazz, Session session) {
Criteria crit = createEntityCriteria(session);
setProjecttionForDto(crit, true, clazz);
return crit;
}
这都是我的子标准
[Subcriteria(bran*******ance:bran*******ance), Subcriteria(buc*****:buc*****), Subcriteria(br****:br****), Subcriteria(dyn***:dyn***), Subcriteria(dyna*****.user:user)]
尝试使用 FetchMode.SELECT
代替:
(Long) crit.setFetchMode("brand",FetchMode.SELECT)
.setProjection(Projections.count("id"))
.uniqueResult();