Skip to content

Commit

Permalink
docs: execute query without support
Browse files Browse the repository at this point in the history
  • Loading branch information
shouwn committed Jan 16, 2024
1 parent ff92df0 commit 3e1c770
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 2 deletions.
29 changes: 28 additions & 1 deletion docs/en/jpql-with-kotlin-jdsl/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,13 +187,40 @@ For example, you can use `JpqlRenderContext` to execute the query:
```kotlin
val context = JpqlRenderContext()

val jpaQuery: Query = entityManager.createQuery(query, context)
val renderer = JpqlRenderer()

val rendered = renderer.render(query, context)

val jpaQuery: Query = entityManager.createQuery(rendered.query).apply {
rendered.params.forEach { (name, value) ->
setParameter(name, value)
}
}

val result = jpaQuery.resultList
```

`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.

{% hint style="info" %}
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.
{% endhint %}

{% hint style="info" %}
[Kotlin JDSL Support](#Support-dependencies) provides extension functions for `EntityManager` to simplify the above process.
Using them, you can execute queries as simple as:

```kotlin
val context = JpqlRenderContext()

val jpaQuery: Query = entityManager.createQuery(query, context)

val result = jpaQuery.resultList
```
{% endhint %}
29 changes: 28 additions & 1 deletion docs/ko/jpql-with-kotlin-jdsl/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,13 +188,40 @@ val query = jpql {
```kotlin
val context = JpqlRenderContext()

val jpaQuery: Query = entityManager.createQuery(query, context)
val renderer = JpqlRenderer()

val rendered = renderer.render(query, context)

val jpaQuery: Query = entityManager.createQuery(rendered.query).apply {
rendered.params.forEach { (name, value) ->
setParameter(name, value)
}
}

val result = jpaQuery.resultList
```

`RenderContext`는 쿼리를 String으로 랜더링할 수 있는 요소들을 가지고 있습니다.
Kotlin JDSL은 `RenderContext`의 default 구현체로 `JpqlRenderContext`를 제공합니다.

`JpqlRenderer``RenderContext`를 이용해 쿼리를 String으로 랜더링합니다.
`JpqlRenderer`는 String으로 랜더링된 `query`와 쿼리에 포함된 `parameters`를 가지고 있는 `JpqlRendered`를 반환합니다.
`JpqlRenderer`는 상태를 가지지 않기 때문에 객체의 재사용이 가능하며 멀티 쓰레드 환경에서 사용하기에 안전합니다.

{% hint style="info" %}
`RenderContext`를 만드는 비용은 비싸기 때문에 한번만 만들고 이를 재활용하는 것을 추천드립니다.
`RenderContext`는 immutable 객체로 멀티 쓰레드 환경에서 사용하기에 안전합니다.
{% endhint %}

{% hint style="info" %}
[Kotlin JDSL Support](#Support-dependencies)는 위 실행 과정을 간략화 시킨 `EntityManager`의 extension function들을 제공합니다.
이를 이용해 쿼리를 쉽게 실행할 수 있습니다.

```kotlin
val context = JpqlRenderContext()

val jpaQuery: Query = entityManager.createQuery(query, context)

val result = jpaQuery.resultList
```
{% endhint %}

0 comments on commit 3e1c770

Please sign in to comment.