我在生产代码行中看到过:
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有什么区别?这根源于一些线程安全的观察吗?
答案 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(...)