EntityListener
@PrePersist
@PostPersist
@PreUpdate
@PostUpdate
@PreRemove
@PostRemove
@PostLoad
AttributeConverter
@Converter
class SnackNutrientConverter : AttributeConverter<SnackNutrient, String> {
private val mapper = jacksonObjectMapper()
override fun convertToDatabaseColumn(attribute: SnackNutrient): String {
return mapper.writeValueAsString(attribute)
}
override fun convertToEntityAttribute(dbData: String): SnackNutrient {
return mapper.readValue(dbData)
}
}
Repository Custom, Extend
interface SnackRepositoryCustom {
fun findBy(name: String): Snack?
}
@Repository
@Transactional
class SnackRepositoryCustomImpl(private val em: EntityManager) : SnackRepositoryCustom {
override fun findBy(name: String): Snack? {
return em.createQuery("SELECT s FROM Snack s WHERE s.name = :name", Snack::class.java)
.setParameter("name", name)
.resultList.firstOrNull()
}
}
기본 Repository Custom
interface MyRepo<T, ID> : JpaRepository<T, ID>
class MyRepoImpl<T, ID>() : MyRepo<T, ID>, SimpleJpaRepository<T, ID>()
@EnableJpaRepositories(repositoryBaseClass = MyRepoImpl::class)
Querydsl
http://www.querydsl.com/static/querydsl/4.0.1/reference/ko-KR/html_single/
Querydsl - 레퍼런스 문서
Querydsl은 JPA, JDO, Mongodb 모듈에서 코드 생성을 위해 자바6의 APT 어노테이션 처리 기능을 사용한다. 이 절에서는 코드 생성을 위한 다양한 설정 옵션과 APT에 대한 대안을 설명한다. 기본적으로 Query
www.querydsl.com
의존성 및 어노테이션 프로세서 추가
implementation("com.querydsl:querydsl-jpa")
kapt("com.querydsl:querydsl-apt:4.2.1:jpa")
QDomain 생성
./gradlew kaptKotlin -i -S
기본 사용법
val car = QCar.car
val query = JPAQuery<Car>(em)
val result = query.from(car)
.where(car.name.eq("asd"))
.fetch()
Spring Data JPA 와 함께 사용하기
@Transactional
class SnackRepositoryCustomImpl : SnackRepositoryCustom, QuerydslRepositorySupport(Snack::class.java) {
override fun findBy(name: String): Snack? {
return entityManager!!.createQuery("SELECT s FROM Snack s WHERE s.name = :name", Snack::class.java)
.setParameter("name", name)
.resultList.firstOrNull()
}
override fun findAllBy(name: String): List<Snack> {
val snack = QSnack.snack
return from(snack)
.where(snack.name.eq(name))
.fetch()
}
}'JPA' 카테고리의 다른 글
| [JPA] 엔티티 작성 시 주의 사항 (feat. 스프링 부트, 코틀린) (0) | 2020.02.06 |
|---|---|
| [JPA] 영속성 컨텍스트(Persistence Context)의 특징 (0) | 2020.01.12 |