Back-end Skill/DataBase
[queryDsl] queryDsl에서 데이터 insert하는 방법
Sophie소피
2022. 10. 24. 01:09
queryDsl
- QueryDSL을 사용하여 쿼리를 Build 하기 위해서는 JPAQueryFactory가 필요하다.
- 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.행된다.