반응형 학습/DB46 @Embedded, @Embedabble @Embeddable @Data @AllArgsConstructor @NoArgsConstructor public class Address { private String city; //시 private String district; //구 private String detail; //상세주소 private String zipCode; //우편번호 } public class User { ... @Embedded private Address address; .... } Address를 @Embedded로 정의하고, @Embeddable로 사용한 경우, 칼럼에는 Address가 들어가는 것이 아니라, 해당 클래스가 가지고 있는변수들로 테이블 칼럼을 구성한다. @Embedded @AttributeOverride.. 2021. 9. 30. Native Query Native Query는 JPA와 무관하게, 실제 DB 쿼리문을 작성할 때 사용된다. @Query 맨 뒤에 nativeQuery=true라고 설정만 해주면 된다. 또한 엔티티를 조회하던 JPQL 문법과 달리 DB에서 사용하는 테이블 기준 쿼리를 작성하면 된다. @Query(value = "select * from book" , nativeQuery = true) List findAllCustom(); @Test void nativeQeuryTest() { booKRepository.findAll().forEach(System.out::println); bookRepository.findAllCustom().forEach(System.out::println); } @Query 메서드는 @Where을 감지해.. 2021. 9. 30. @Transactional 현재 있는 트랜잭션과 다른 클래스의 트랜잭션이 전파되는 현상을 정리한다. enum Propagation에서는 다음 7가지를 지원한다. REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED) SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS) MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY) REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW) NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) NEVER(TransactionDefinition.PROPAGATIO.. 2021. 9. 26. 고아제거 속성 알아보기 cascade의 삭제에 대해서 알아본다. 이전에 book 클래스는 PERSIST와 MERGE만 적용하고 있었다. public class Book { ... @ManyToOne(cascade = {cascade = CascadeType.PERSIST, cascade = CascadeType.MERGE}) @ToString.Exclude private Publisher publisher; ... } * cascade 제거 확인하기 ( Book N : 1 Publisher ) @Test void bookCascadeTest() { Book book = new Book(); book.setName("JPA 초격자 패키지"); Publisher publisher = new Publisher(); publisher.. 2021. 9. 26. Cascade 활용하기 cascade는 폭포라는 뜻으로, 폭포를 흘려보내듯이 하나의 영속성을 다른 객체로 전이하는 것이다. @OneToMany, @OneToOne, @ManyToMany에서 cascade 설정이 가능하다. cascade 종류 6가지는 다음과 같다. ALL, PERSIST, MERGE, REMOVE, REFRESH, DETACH ALL 모든 5개 종류 적용 PERSIST 저장 같이한다. MERGE 수정 적용한다. REMOVE 삭제 같이한다. REFRESH 재로딩 같이한다. DETACH 영속성 컨텍스트에서 같이 분리한다. * Book 1 : N publisher로 설정된 관계에서 테스트진행 @Test void bookCascadeTest() { Book book = new Book(); book.setName("J.. 2021. 9. 26. @Query 활용하기 2 *@Query에서 매개변수 순서 사용하여 조회하기 List findByCategoryIsNullAndNameEqualsAnd CreatedAtGreaterThanEqualAndUpdatedAtGreaterThanEqual (String name, LocalDateTime createdAt, LocalDateTime updatedAt) @Query를 사용해서 긴 조회의 내용을 줄일 수 있다. 물음표 숫자를 이용해 몇번째에 있는 매개변수 인지 매칭시킨다. @Query(value = "select b from Book b " +"where name =?1 and createdAt>= ?2 and updatedAt >=?3 and category is null"); List findByNameRecently(S.. 2021. 9. 26. @Query 활용하기 1 *JPA에서 칼럼명을 이용해서 조회하기 List findByCategoryIsNullAndNameEqualsAnd CreatedAtGreaterThanEqualAndUpdatedAtGreaterThanEqual (String name, LocalDateTime createdAt, LocalDateTime updatedAt) findByCategory : 칼럼 Category가 null이다. NameEquals : 매개변수 name과 같다. CreatedAtGreaterThanEqual : CreatedAt이 매개변수 createdAt과 같거나 크다. UpdatedAtGreaterThanEqual, UpdatedaT이 매개변수 updatedAt과 같거나 크다. *ColumnDefinition 사용하기 @D.. 2021. 9. 26. Transaction 격리수준 springframework의 @Transactinoal은 isolation을 제공한다. 격리단계라고도 부른다. 동시에 발생하는 데이터 접근을 어떻게 처리할 것인지를 정한다. 총 5가지 종류를 제공한다. DEFAULT(TransactionDefinition.ISOLATION_DEFAULT) READ_UNCOMMITTED(TransactionDefinition.ISOLATION_READ_UNCOMMITTED) READ_COMMITTED(TransactionDefinition.ISOLATION_READ_COMMITTED) REPEATABLE_READ(TransactionDefinition.ISOLATION_REPEATABLE_READ) SERIALIZABLE(TransactionDefinition.ISOLA.. 2021. 9. 26. db Transaction(롤백처리) *Transaction 디비에서는 transaction으로 단위를 묶어서 쿼리를 실행한다. 물건을 구매하고 결제하는 것은 같은 단위(트랜잭션) 안에서 발생해야 한다. 주문은 했는데 돈을 결제가 안되면 문제가 생긴다. 따라서 하나의 트랜잭션 안에서 처리해야 한다. 트랜잭션이 성공적으로 커밋하면 한번에 2가지가 저장되고 실패해서 롤백되면 주문과 결제 모두 취소되어야 한다. ACID automicity 원자성(all or nothing) 트랜잭션 관련 작업들이 중간에 중단되지 않는 것을 보장한다. 돈의 송금을 예로 들어, 송금을 했으면 상대방은 돈을 받아야 한다. 돈을 송금하는 것은 성공했는데, 받는 것은 실패해서는 안된다. consistency 일관성 트랜잭션이 성공적으로 완료되면 언제나 일관성 있는 상태를.. 2021. 9. 26. 이전 1 2 3 4 5 6 다음 반응형