使用静态导入和使用 QueryDSL 创建新的 q 类型实例有什么区别?

What is the difference in use static import and create new q-type instance using QueryDSL?

我在生产代码行中看到这样的:

public Info findById(final long id){
 QInfo info = QInfo.info;
 JPAQuery query = newJpaQuery().from(info);
 .....
}

另一方面:

import static com.example.system.app.entities.QApplication.application;

public Application findById(final long id){
        return newJpaQuery().from(application).where(application.applicationId.eq(id)).uniqueResult(application);
    }

使用静态导入和为每个方法创建 Q 实例有什么区别?其根源是否来自一些线程安全的观察?

Q 实例是线程安全的,但有时您需要在同一类型的查询中使用多个变量。

一般情况下,如果每种类型只需要一个变量,默认变量就足够了,如果需要更多,则需要创建额外的变量。

这些附加变量可以按查询创建或作为常量创建。

例如

QInfo info = QInfo.info; // default variable
QInfo info2 = new QInfo("info2"); // extra variable
newJpaQuery().from(info).innerJoin(info.path, info2).where(...)