본문 바로가기
728x90

🍃SpringFrameworks/SpringDataJPA17

[JPA] QueryDSL이란? QueryDSL은 JPA를 사용하여 데이터베이스 쿼리를 작성하고 실행하기 위한 유용한 도구이다. QueryDSL을 사용하면 Java 코드로 쿼리를 작성할 수 있어서, 컴파일 타임 오류확인 및 IDE의 자동완성 기능을 사용할 수 있다. QueryDSL?: JPA Entity와 관련된 쿼리를 생성하기 위한 builder 라이브러리이다. SQL을 직접 작성하는 대신, Java 코드를 사용하여 query를 작성할 수 있다. Entity와 Q타입: Entity의 메타 모델을 사용하여 query를 작성하기 때문에 Entity클래스에 대응하는 Q타입 클래스가 필요하다. ex) Customer -> QCustomer 문법: QueryDSL은 Java코드로 작성되며, MethodChaining을 사용하여 query를 작.. 2023. 9. 26.
[JPA] Native Query. 네이티브 쿼리 NativeQuery는 JPA의 EntityManager를 통해 직접 SQL을 작성하고 실행할 수 있게 해주며, 이를 사용하여 JPA의 영속성 컨텍스트를 우회하여 직접 데이터베이스와 상호 작용할 수 있다. 장점: 복잡한 쿼리를 사용해야 할 때 JPQL로는 표현하기 어려운 경우에 유용하다. 특정 DBMS의 기능을 사용해야 할 때 필요하다. *보통 JPQL을 사용하고 이러한 특정 상황에서만 NativeQuery를 사용하는 것이 좋다. 특징: 반환 타입 : 반환 타입으로 Entity가 아닌 Dto나 기본 자료형을 사용해야 한다. Named Parameter 사용 : [:param] 형식으로 네임드 파라미터를 사용하여 바인딩 할 수 있다. Entity 매핑 : Entity를 사용하지 않기 때문에 수동으로 결과를.. 2023. 9. 25.
[JPA] Entity와 Entity Manager & 영속성 컨텍스트 EntityManager는 JPA에서 Entity를 관리하고 DataBase와의 통신을 담당하는 인터페이스이다. EntityManager는 주로 Entity의 생명주기를 관리하고, Entity와 DataBase간의 상호 작용을 처리한다. 📌 영속성 컨텍스트란? 영속성 컨텍스트는 JPA에서 Entity객체들을 관리하는 논리적인 영역이다. System 영속성 컨텍스트 DataBase 이런 중개자 같은 개념으로 System에서 Entity가 DB에 바로 접근하지 않고, 영속성 컨텍스트에 의해 관리되며 Transaction단위로 commit, rollback 등의 작업을 수행한다. 캐싱, 쓰기 지연, 변경 감지 등의 기능으로 이미 조회한 데이터를 영속성 컨텍스트에서 가져오거나 직접적으로 DB에 접근하지 않기 때.. 2023. 9. 25.
[JPA] JPQL (Java Persistence Query Language) JPQL은 JPA에서 사용하는 객체지향적인 쿼리 언어로 JPQL을 사용하여 Entity객체를 대상으로 쿼리를 작성할 수 있다. 객체 중심 쿼리 언어: JPQL은 데이터베이스 테이블이 아닌 Entity객체를 대상으로 쿼리를 작성한다. SQL과 유사하지만 테이블이 아닌 Entity와 그 Entity의 속성을 사용한다. select, from, where, group by, having, order by 등 표준 SQL과 기본 문법은 같다. 특징: JPQL은 객체지향적이며 Entity객체를 대상으로 쿼리를 작성하기 때문에 데이터베이스에 종속적이지 않다. JPQL을 사용하면 Entity객체 사이의 관계를 활용하여 복잡한 쿼리도 작성할 수 있다. Query문에서 FROM [Entity] [EntityAlias] .. 2023. 9. 25.
[JPA] Query Method. 쿼리 메서드 Query Methods는 Spring Data JPA에서 제공하는 기능으로 DB에서 데이터를 조회(select), 저장(insert), 수정(update), 삭제(delete) 등의 작업을 쉽게 수행할 수 있다. QueryMethods는 메서드의 이름 자체로 쿼리를 생성하는 방식으로, 메서드 이름을 통해 JPA는 쿼리를 자동으로 생성하고 실행한다. 이를 통해 개발자는 복잡한 JPQL, QueryDSL 등과 같은 쿼리를 작성하지 않고도 간단한 메서드로 DB조작이 가능하다. 보통 데이터를 조회하는 용도로 사용된다. (delete, save 메서드 지원) 데이터 조회하기 메서드 이름 작성 규칙 메서드 이름은 "find", "read", "get"으로 시작해야 한다. "By" 다음에 엔터티의 속성 이름이 위치.. 2023. 9. 25.
[JPA] JPA Lock의 개념과 사용 JPA(Java Persistence API)에서의 락(Lock)은 동시에 여러 사용자가 같은 데이터를 수정할 때 데이터 일관성을 유지하기 위한 메커니즘이다. 이를 통해 여러 트랜잭션이 동시에 동일한 데이터를 수정할 때 발생할 수 있는 문제를 해결할 수 있다. 즉 트랜잭션에 포함되어 있는 개념이라고 할 수 있다. 이와 같이 하나의 Transaction이 특정 데이터에 접근하게 되면 해당 데이터에 대한 연산작업을 진행하는 동안 LOCK을 걸어 다른 트랜잭션에서 접근하지 못하게 한다. Optimistic Lock (낙관적 락): 낙관적 락은 데이터를 읽을 때 락을 걸지 않고, 데이터를 업데이트할 때 버전 번호 등을 체크하여 충돌이 발생하지 않도록 하는 방식이다. 버전 관리를 위한 필드에 @Version 어노.. 2023. 9. 11.
[JPA] 주요 개념 트랜잭션(Transaction) 데이터베이스를 다룰 때 트랜잭션을 적용하면 데이터 추가, 갱신, 삭제 등으로 이루어진 작업을 처리하던 중 오류가 발생했을 때 모든 작업들을 원상태로 되돌릴 수 있다. 모든 작업들이 성공해야만 최종적으로 데이터베이스에 반영하도록 한다. 즉 데이터를 추가, 수정, 삭제 시킬 때 바로 DB에 반영 하지 않고 영속성 캐시에 담아뒀다 한번에 반영 하게 된다. UPDATE JPA는 Update 메서드를 따로 제공하고 있지 않다. 그렇기에 Service로직에 @Transactional 어노테이션을 붙이고, Entity데이터를 조회 후 set() 하여 Entity의 데이터를 수정만 하면 데이터베이스에 대한 연산?작업이 끝날 때 @Transactional 어노테이션에 의해 Entity의 .. 2023. 9. 10.
[JPA] 고아 객체 제거(OrphanRemoval) JPA는 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제한다. 💡 OrphanRemoval 고아가 된 값을 제거하는 속성이다. 즉, 연관관계를 가지고 있는 상위 Entity에서 값이 제거될 때 해당 Entity를 참조하고 있던 하위 Entity의 값도 제거한다. default값이 false고 true로 지정하면 적용된다. Ex> @OneToMany(orphanRemoval = true) @JoinColumn(name = “publisher_id”) private List books = new ArrayList(); 2023. 9. 10.
[JPA] Cascade. 영속성 전이 💡 cascade ‘종속’되다는 의미로 서로 관계가 있는 테이블의 속성에 대한 값을 종속 즉, insert, update 등이 같이 실행되어 값이 똑같이 유지되게 한다. [Option] ALL ⇒ 모든 Cascade옵션을 적용 (모르겠으면 ALL적용) PERSIST ⇒ entity를 영속 상태로 만들면, 매핑된 entity도 함께 영속 상태가 됨 (insert) MERGE ⇒ 준영속 상태의 entity를 영속 상태로 만들면, 매핑된 entity도 모두 영속 상태가 됨 (save) REMOVE ⇒ entity를 제거하면 매핑된 entity도 모두 제거 REFRESH ⇒ entity를 다시 읽어올 때, 매핑된 entity도 모두 다시 읽어옴 DETACH ⇒ entity를 준영속 상태로 만들면, 매핑된 ent.. 2023. 9. 10.
728x90