Goal
- Criteria API
- CriteriaBuilder
- CriteriaQuery
Criteria API
Java Persistence Criteria API ๋ JPQL ์ ๋ฌธ์์ด ๊ธฐ๋ฐ ์ ๊ทผ ๋ฐฉ์์ ์ด์ฉํ๋ ๋์ ๊ฐ์ฒด ๊ธฐ๋ฐ ์ฟผ๋ฆฌ ์ ์ ๊ฐ์ฒด์ ๊ตฌ์ฑ์ ํตํด ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค. Critera API ์๋ type-restricted mode, non-typed mode ๋ก ๋๋๋ฉฐ, ๋ฐํ์ ์ ๋์ ์ผ๋ก ์กฐํ ๋น๋๋ฅผ ์ง์ํด ์ปดํ์ผ๋ฌ๊ฐ ๊ฒ์ฆํ ์ ์๋๋ก ํ๋ค. ๋ํ Criteria API ๋ ๋์ ์ฟผ๋ฆฌ์๋ง ์ฌ์ฉ๋์ด ๋ฉํ๋ฐ์ดํฐ ๋๋ Named Query ์์๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋์ ์ฟผ๋ฆฌ์์๋ง ์ฌ์ฉํ ์ ์์ด ๊ธฐ์กด์ ์ ์ Named Query ์ ๋นํด ์ฑ๋ฅ์ด ๋ฐ์ด๋์ง ์๋ค. ๊ทธ๋ฌํ ์ด์ ๋ก JPA Provider ๋ฅผ ํตํด ๊ตฌ๋ฌธ ๋ถ์ ์บ์์ ์ด์ ์ ์ป๋ JPQL ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
(JPA 2.1 ๋ถํฐ CriteriaUpdate, CriteraiaDelete ๋ฅผ ์ง์ํ๋ค.)
CriteraBuilder
CriteraBuilder ๋ Critera API ์ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค๋ก, EntityManager ๋๋ EntityManagerFactory ๋ฅผ ํตํด getCriteriaBuilder() API ๋ฅผ ํธ์ถํ์ฌ Builer ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค.
- createQuery()
- createQuery(Class)
- createTupleQuery()
- createCriteriaDelete(Class)
- createCriteriaUpdate(Class)
CriteriaQuery
CriteriaQuery ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Select Query ๋ฅผ ์ ์ํ๋ค. ๋ฐ๋ผ์ JPQL Select Query ์ ๋ชจ๋ ๊ตฌ๋ฌธ์ ๋ชจ๋ธ๋งํ๋ค.
CriteriaQuery ์์ฑ ์, ํด๋น ์ฟผ๋ฆฌ์์ ์ฌ์ฉ๋ ์์๋ ๋ค๋ฅธ CriteriaQuery ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, EntityManager ์ createQuery() ํจ์๋ฅผ ํตํด JPA ์ฟผ๋ฆฌ๊ฐ ์์ฑ๋๋ค.
- distinct(Boolean)
- from(Class)
- from(EntityType)
- select(Selection)
- multiselect(Selection...)
- where(Expression)
- orderBy(Order...)
- groupBy(Expression...)
- having(Expression)
- subQuery(Class)
Example
@Component
class EBootCriteria(
@PersistenceContext
private val entityManager: EntityManager
) {
fun getEBook(): List<EBook> {
val criteriaBuilder = entityManager.criteriaBuilder
val criteriaQuery = criteriaBuilder.createQuery(EBook::class.java)
val root = criteriaQuery.from(EBook::class.java)
val isEquals = criteriaBuilder.equal(root.get<String>("name"), "Clean Code")
criteriaQuery.select(root)
.distinct(true)
.where(isEquals)
val query: TypedQuery<EBook> = entityManager.createQuery(criteriaQuery)
return query.resultList
}
}
'Programming > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Security] @AuthenticationPrincipal Test Trouble Shooting (0) | 2023.04.08 |
---|---|
[QueryDSL] NoSuchMethodError Trouble Shooting (0) | 2023.02.22 |
Spring Bean / IoC Container / DI (1) | 2023.01.21 |
JPA / Persistence Context / Transactional (2) | 2023.01.14 |
Spring | Spring Framework ? (0) | 2020.08.02 |