#1252: DBQueryBuilderByCriteria.kt

projectforge-business/src/main/kotlin/org/projectforge/framework/persistence/api/impl/DBQueryBuilderByCriteria.kt Query Engine (Criteria), projectforge-business/src/main/kotlin/org/projectforge/framework/persistence/api/impl/DBQueryBuilderByCriteria.kt 87 lines · 54 code · 25 comments · 8 blank
Internal JPA Criteria API query builder used by QueryFilter for structured database queries. Translates DBPredicate objects into JPA Predicate instances via CriteriaBuilder, manages joins, and creates a DBCriteriaResultIterator for result iteration with in-memory filtering.

Architecture

Constructor Dependencies

Lazy Initialization

private val ctx: DBCriteriaContext<O> by lazy {
    val cb = entityManager.criteriaBuilder
    val cr = cb.createQuery(baseDao.doClass)
    DBCriteriaContext(cb, cr, cr.from(baseDao.doClass), baseDao.doClass).also {
        queryFilter.joinList.forEach { join -> it.addJoin(join) }
    }
}

The DBCriteriaContext is lazily constructed to defer JPA root.from() until needed.

Core Methods

MethodDescription
add(matcher: DBPredicate)Converts DBPredicate to JPA Predicate via matcher.asPredicate(ctx)
addOrder(sortProperty)Adds ASC/DESC ordering using ctx.cb.asc() or ctx.cb.desc()
createResultIterator(predicates, queryFilter)Builds the final CriteriaQuery with where/orderBy clauses, wraps in DBCriteriaResultIterator

Error Handling

Git History

868d6abb7 2025 -> 2026
b131193e7 Member variables refactored by using by lazy {}.
63081666f Source file headers: 2024-> 2025.
b71b5073d Migration stuff in progress... (all tests OK).
3264694a8 Migration stuff in progress... (all tests OK).
4c04cfd65 MAJOR-CHANGE! Migration of integer id's to Long id's.
06828f490 Migration stuff in progress...
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
5f7ef41b8 Copyright 2021 -> 2022
ceb63e8a1 Source code header: (C) 2001-2021.
7c79f1922 Copyright of source header -> 2020.
012e046df DBQueryBuilderByCriteria: exception of unknown properties for order by caught.
2609f511f Heavy WIP: session -> em
ee355d979 WIP: Session -> EntityManager...
9896ea5c5 WIP: Session -> EntityManager...
bf3d20864 DB.SortProperty fixed.
14af0e09e DBAlias -> DBJoin.
66d9e3a30 WiP: DBQuery* and QueryFilter: aliases....
efb8e0b16 WiP: DBQuery* and QueryFilter: aliases....
88bf1de7c WiP: DBQuery* and QueryFilter...
39cdd224c Hibernate search: DateBridge...
7998890ea WiP: DBQuery* and QueryFilter...
a59e59eb1 WiP: DBQuery* and QueryFilter...
5e65f6b22 WiP: DBQuery*
a48f5a193 WIP: JPA...
7e54bd634 MagicFilter: Unrecommended full text search combined with Hibernate query removed.
257c6cb6f WIP: MagicFilter... (sort order)
cb2ea2e24 WIP: MagicFilter... (sort order)
6c179b06f WIP: MagicFilter...
d32dbc8b4 WIP: MagicFilter...