Spring/1-3. JPA

JPQL(Java Persistence Query Language) : Entity 객체를 조회하는 쿼리 QueryDSL : 쿼리 메소드 : 쿼리메소드의 경우 조건이 많아지게 되면 메소드의 이름이 길어지는 단점이 있다. public interface BookRepository extends JpaRepository { List findByCategoryIsNullAndNameEqualsAndCreatedAtGreaterThanEqualAndUpdatedAtGreaterThanEqual(String name, LocalDateTime createdAt, LocalDateTime updatedAt); } !!! @Query 어노테이션을 사용하여 메소드 명을 줄이고 가독성을 높인다. @Query 어노테이션 사..
영속성 전이 : 하나의 객체에서 다음 객체에 영속성을 흐려 보내는 것 Cascade의 경우, 연관관계가 있는 엔티티에(@OneToMany, @OneToOne...) 있는 경우에 CascadeType에 사용 가능. CascadeType 클래스 (Enum 타입) ALL : 모든 엔티티에 영속성 전이. PERSIST : 엔티티 저장시 영속성 전이 MERGE : 엔티티 업데이트 시 영속성 전이 REMOVE : 엔티티 제거 작업 시 영속성 전이 REFRESH : 엔티티의 영속성을 재로딩. DETACH : 영속성을 관리하지 않고 영속성으로부터 분리하는 속성. 해당 영역으로 전이가 일어날 때 릴레이션 엔티티에도 함께 전이를 일이킬지에 대한 속성 값 예제 1. CascadeType.PERSIST CascadeType...
트랜잭션 Transaction? : 트랜잭션이란 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위, 또는 한꺼번에 모두 수행되어야할 일련의 연산을 뜻함 원자성...일관성...독립성...영속성....(ACID) Spring과 Java에서의 트랜잭션 Spring의 @Transactional : Transactional의 경우 class위와 method위에 어노테이션을 붙여줄 수 있다. class의 경우 내부에 있는 각각의 method를 트랜잭션화 한다는 것으로 method에 추가로 붙이면 method에 붙은 걸 우선 적용후 class 트랜잭션이 적용된다. 예제 1. @Transactional(rollbackFor = Exception.class) 사용 @Transactional(rollbackFor..
1. 영속성 컨텍스트 Persistence Context : 데이터를 영속화하는데 사용하는 컨테이너, JPA 컨테이너 안에서 돌아가는 Entity를 관리하는 컨텍스트 주체가 되는 클래스 EntityManager 를 사용 -> Spring Boot JPA dependency를 통해 별도의 Persistence 파일 사용없이 Persistence 설정들을 처리해줌 EntityManager : 영속성 컨텍스트 내에서 Entity들을 관리, JpaSimpleRepository에서 직접적으로 EntityManager를 사용하지 않도록 한번더 감싸준 것 @SpringBootTest public class EntityManagerTest { @Autowired private EntityManager entityMan..
- Listener 이벤트가 발생하면 특정 동작을 진행 1. Entity Listener Annotation > @PrePersist - insert method가 호출되기 전 @PreUpdate - merge method가 호출되기 전 @PreRemove - delete method가 호출되기 전 > @PostPersist - insert method가 호출된 후 @PostUpdate - merge method가 호출된 후 @PostRemove - delete method가 호출된 후 @PostLoad - select 조회가 된 후 domain객체에 메소드 생성 ( * Annotaion명을 메소드명에 일치할 필요 없음 ) @NoArgsConstructor @AllArgsConstructor @Requi..
@Entity - 해당 객체를 JPA에서 관리하는 객체임을 말함 - PK인 @Id가 반드시 필요 @Id - 엔티티의 PK @GeneratedValue - 어노테이션 안에 GenerationType strategy() default Auto; - GenerationType이라는 enum 객체안의 TABLE, SEQUENCE, IDENTIY, AUTO 1. TABLE : DB에 상관없이 ID를 관리하는 별도에 테이블을 사용 2. SEQUENCE : Oracle, PostgreSql, h2 3. IDENTITY : MySql, MariaDB 4. AUTO : 각 DB에 적합한 값을 전달 - 트랜잭션이 종료되기 전, Auto Increase를 통해 아이디 값을 사전에 가져온다. @Table - 테이블 name,..
QueryMethod - 복잡한 WHERE 조건의 쿼리를 만드는 방법 1. Query return types 2. Query subject keywords 3. Query predicate keywords 출처 : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ Spring Data JPA - Reference Documentation Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname)..
JpaRepository를 보면 findById와 getOne두가지의 비슷한 기능을 하는 메서드가 존재한다. 먼저 시그니처를 살펴보자. T getOne(ID id); Optional findById(ID id); 둘다 Id를 파라미터로 받도록 되어있고, Id에 매칭되는 객체 하나만 가져오는데 어떤 차이가 있어서 다르게 제공하고 있는걸까? 단순히 Optional로 결과를 받는 차이가 있는것처럼 보이지만, 실제로는 더 중요한 차이점이 있다. getOne Returns a reference to the entity with the given identifier. Depending on how the JPA persistence provider is implemented this is very likely to..
defxyj
'Spring/1-3. JPA' 카테고리의 글 목록