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

时间:2015-02-25 13:23:25

标签: java 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-instance有什么区别?这根源于一些线程安全的观察吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

e.g。

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