如何从 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();