Back-end Skill/DataBase

[queryDsl] queryDsl에서 데이터 insert하는 방법

Sophie소피 2022. 10. 24. 01:09

queryDsl

  1. QueryDSL을 사용하여 쿼리를 Build 하기 위해서는 JPAQueryFactory가 필요하다.
  2. JPAQueryFactory를 사용하면 EntityManager를 통해서 질의가 처리되고, JPQL을 사용한다.

EntityManager?

JPAQueryFactory는 insert()를 가지고 있지않기 때문에

insert를 하려면 EnityManager를 사용한다.

@Service
@Transactional(readOnly = true)
class BoardServiceImpl(
    val boardRepository: BoardRepository,
    val em: EntityManager
) : BoardService {

/**  작성글 작성   **/
    @Transactional
    override fun postBoard(dto: BoardDTO): Long? {
        val board = Board(dto)
        em.persist(board)
}

 

em.Persist..?

먼저 EntityManager의 persist부터 알아보자. 

Article article = new Article(content); // Transient/New
em.persist(article);   // Managed

처음에 엔티티 객체를 생성했다면,

이 객체는 Transient/New 상태인 것이다.

이 상황에서 persist없이 곧바로 Transaction을 종료한다면

db상에는 아무런 변화도 일어나지 않는다. 

이 엔티티를 Persistence Context가 관리하도록 하기 위해서는 persist 메서드를 호출해야 하고

이 메서드가 호출되면 article은 managed(영속)상태로 진입하게 된다..

이 managed되고 있는 엔티티들은 EntityManager에 의해 ‘변경감지’가 적용되어 Per.행된다.