别名
设置要用于基本表的表别名。
List<Customer> customers =
new QCustomer()
.alias("cust")
.name.istartsWith("Rob")
.findList();
select cust.id, cust.inactive, cust.name, cust.registered, ...
from customer cust
where lower(cust.name) like ? escape'|' ; --bind(rob%)
别名的典型用法是在用作子查询时。
Query<Order> subQuery = new QOrder()
.alias("sub")
.select("id").where().raw("sub.customer_id = main.id")
.query();
List<Customer> customers = new QCustomer()
.alias("main")
.query().where().exists(subQuery)
.findList();
select main.id, main.inactive, main.name, main.registered, ...
from customer main
where exists (select sub.id from orders sub where sub.customer_id = main.id)
asDraft
用于从其草稿表(而不是已发布表)中获取 @Draftable
实体。
Document documentDraft =
new QDocument()
.asDraft()
.id.equalTo(42)
.findOne();
asOf 时间戳
对于具有 @History 的实体,获取给定时间戳AS OF
的实体。
Timestamp timeInPast = ...;
List<Customer> customers
= new QCustomer()
.asOf(timeInPast)
.findList();
自动调整
启用或禁用自动查询调整。
List<|Customer> customers = new QCustomer() .setAutoTune(true) // 自动调整查询 .status.equalTo(Status.NEW) .findList();bufferFetchSizeHint
一个提示,对于 JDBC 来说,它转换为 Statement.fetchSize()。
向 JDBC 驱动程序提供一个提示,说明当 ResultSet 需要更多行时,应从数据库中获取的行数。
disableLazyLoading
禁用任何原本会发生的延迟加载。相反,未加载的属性将返回 null。
disableReadAuditing
禁用此查询的读取审计。请参阅 读取审计。
当查询不是用户发起的查询,而是应用程序中加载缓存或文档存储等内部处理的一部分时,应使用此方法。在这些情况下,我们不希望查询成为读取审计的一部分。
distinct
使查询使用 sql distinct
。
List<String> lastNames =
new QContact()
.setDistinct(true)
.select("lastName")
.email.isNull()
.findSingleAttributeList();
int count =
new QCustomer()
.setDistinct(true)
.select("anniversary")
.status.equalTo(Customer.Status.NEW)
.findCount();
select count(distinct t0.anniversary) from customer t0 where t0.status = ?
// partially loaded beans without Id properties
// ... not persistable, no lazy loading etc
List<Customer> beans =
new QContact()
.setDistinct(true)
.select("lastName, dateOfBirth")
.findList();
forUpdate
使用 FOR UPDATE
执行查询,该查询将对获取的行保持锁定。
try (Transaction txn = database.beginTransaction()) {
Customer customer =
new QContact()
.forUpdate()
.email.equalTo("[email protected]")
.findOne();
customer.setName("a better name");
customer.save();
txn.commit();
}
includeSoftDeletes
设置为 true 以包括软删除的行。请参阅 软删除。
lazyLoadBatchSize
将其设置为调整延迟加载批处理大小,该大小默认设置为 10
。
persistenceContextScope
通常查询使用 事务作用域持久化上下文
运行。使用此功能,我们可以将对象图设置为 QUERY
,该对象图将是数据库中的最新数据,忽略 [事务] 持久化上下文中存在的任何 bean。
try (Transaction txn = database.beginTransaction()) {
// when customer is loaded it then is referenced in the
// transaction scoped persistence context (aka L1 cache)
Customer loaded = Customer.find.byId(42)
// fetch this same customer but we want to ignore the L1 cache
// such that we get a "fresh" version of its data
Customer customer =
new QCustomer()
.id.equalTo(42)
.setUseCache(false) // ignore L2 cache
.setPersistenceContextScope(QUERY) // ignore L1 cache
.findOne();
...
txn.commit();
}
readOnly
查询返回被视为 只读
的 bean,调用 setter 方法将引发异常。