JPQL with Kotlin JDSL
Requirements
At least Java 8 and Kotlin 1.7 are required to build and run an application with Kotlin JDSL.
Configure the repositories
Before adding Kotlin JDSL dependencies, you need to configure the repositories for this project:
Release
Releases of Kotlin JDSL are available in the Maven central repository. You can declare this repository in your build script as follows:
Snapshot
Declare the OSS snapshot repository to get access to snapshots of Kotlin JDSL:
Add Kotlin JDSL dependencies
Core dependencies
The following dependencies are the minimum requirement for all Kotlin JDSL applications:
jpql-dsl: Contain a DSL to build a JPQL query
jpql-render: Render the JPQL query created with the DSL as String
Support dependencies
Add the Support dependencies to execute the query created with the DSL. For each JPA provider, Kotlin JDSL provides the following dependencies:
hibernate-support: Assist to execute the query with Hibernate
eclipselink-support: Assist to execute the query with EclipseLink
spring-batch-support: Assist to execute the query with Spring Batch
spring-data-jpa-support: Assist to execute the query with Spring Data JPA
hibernate-reactive-support: Assist to execute the query with Hibernate Reactive
Javax
For the javax, Kotlin JDSL also provides the following dependencies:
hibernate-javax-support: Assist to execute the query with Hibernate
eclipselink-javax-support: Assist to execute the query with EclipseLink
spring-batch-javax-support: Assist to execute the query with Spring Batch.
spring-data-jpa-javax-support: Assist to execute the query with Spring Data JPA.
hibernate-reactive-javax-support: Assist to execute the query with Hibernate Reactive
Build a query
You can call select()
in jpql()
to build a select statement:
Similarly, Kotlin JDSL provides functions for all the other statements: update statement, and delete statement. You can also see more examples on GitHub.
In addition, you can also create your own custom DSL
Execute the query
After building the query, you can use RenderContext
to execute the query. For example, you can use JpqlRenderContext
to execute the query:
RenderContext
has elements for rendering the query as String. Kotlin JDSL provides JpqlRenderContext
as the default RenderContext
for the JPQL.
JpqlRenderer
renders the query as String using the RenderContext
. This returns JpqlRendered
, which has the query
rendered as String and the parameters
contained in the query. This has no state, so you can reuse the object of this and access it from multiple threads.
Creating RenderContext
is expensive, so the Kotlin JDSL recommends creating it once and reusing it afterward. Since RenderContext
is immutable, you can access RenderContext
from multiple threads.
Kotlin JDSL Support provides extension functions for EntityManager
to simplify the above process. Using them, you can execute queries as simple as:
Last updated