[JPA] @Query
BackEnd/패캠 2022. 2. 5. 15:29

[JPA] 영속성 전이 – Cascade
BackEnd/패캠 2022. 2. 4. 15:28

0. ALL 1. PERSIST -> 저장 2. MERGE -> 연관 관계에 있는 비영속 인스턴스를 영속 인스턴스로 병합 3. REMOVE -> 삭제 4. REFRESH -> 재로딩 5. DETACH 질문 : persist하면 영속상태로 되니까 컨테이너가 관리해서 merge도 자동으로 되는 것 아닌가..? * publisher 엔티티의 books 속성에 값 추가하기 => publisher.getbooks().add(book) 로해도 publisher의 books 값도 같이 변경된다.(call by reference) => 하지만 가독성을 위해 set을 사용하는 것이 좋음(여기선 add메서드를 publisher 클래스에 추가해서 그거 호출) * 1) cascade=persist => 한 엔티티(book)를..

[JPA] 트랜잭션
BackEnd/패캠 2022. 2. 3. 15:28

*트랜잭션의 특징 : acid 원자성 : 전체 성공 or 전체 실패 일관성 : 데이터간의 정확성 독립셩 : 다른 트랜잭션이 중간 연산결과에 접근불가 영속성 : 상태가 영구적으로 db에 저장 * ddl-auto를 create-drop하면 테스트 실행동안 테이블이 생기다가 끝나면 삭제됨 (>>디버그 브레이크 포인트를 통해 테이블 확인할 수 있음) * 테이블에 데이터 추가하는 메서드를 @Transactional로 묶으면 메서드 중간에는 데이터가 추가되지 않고 메서드가 끝나고 한번에 처리됨 ㄴ @Transactional하면 java에서 제공하는 것과 스프링에서 제공하는 것 두가지가 있다. (여기선 스프링걸 써봄) * 메서드가 끝나기 직전에 Exception을 발생하면 어떻게 될까? 1) RuntimeExcept..

[JPA] 영속성
BackEnd/패캠 2022. 2. 2. 15:27

* jpa:generate-ddl: jpa 구현체와 상관없이 자동화된 ddl을 사용하도록 하는 것, Spring Application 실행시점에 Hibernate에서 자동으로 DDL을 생성해서 필요한 데이터베이스의 Table설정을 자동으로 수행 * jpa:hibernate:ddl-auto : 데이터베이스의 초기화 전략 : none / create-drop(시작 할 때 생성, 종료 때 drop) / update(변경된 스키마를 적용) /create(항상 새로 생성) / validate(변경사항이 있으면 변경사항을 출력하고 종료) 중에 값을 가짐 : 위에 generate-ddl값 과 상충하면 ddl-auto를 따름 * datasource:initialization-mode : data.sql, 스키마파일을 ..

[JPA] 연관관계
BackEnd/패캠 2022. 2. 1. 15:28

- 클래스 멤버변수로 다른 클래스를 가지고 싶을 때 JPA에서는 id대신 그 객체 자체를 멤버로 가지고 그걸 @OneToOne .. 으로 설정하면 자동으로 연관관계가 만들어진다. - ERD에 없어도 양방향으로 @~to~를 달아준다. =>실제 db에서는 소유한 클래스의 id가 필드로 추가된다. ㄴ optional = : 해당 클래스는 null값을 가질 수 없다. ㄴ mappedBy=”” 주인이 아닌 클래스에서 역으로 주인을 참조할 때. 속성값으로 자기 자신을 적어준다(?), 이걸 하면 주인 클래스는 컬럼에 추가되지 않는다.(주인 클래스를 소유하지 않았으므로) ㄴ 1. FK가 있는 곳을 주인으로 한다. 2. 객체의 개념에 따라서 Book에도 BookReviewInfo를 추가하고, BookReviewInfo에..

[JPA] EntityListener
BackEnd/패캠 2022. 1. 31. 15:24

@Pre/PostPersist(삽입 전/후), @Pre/PostUpdate(업뎃 전후), @Pre/PostRemove(삭제 전후), @PostLoad(select문 전/후) => 객체에다가 @EntityListener(리스너클래스) 등록해주면 거기에 위의 어노테이션에 따라서 이벤트 처리를 해주는 것 내가 만든 myentityListener를 상속 -> ‘@createdDate, @LastModifiedDate 등록 후 jpaenableAuditing 리스너를 등록한 클래스’를 상속 @EntityListeners(AuditingEntityListener.class 해당 클래스에 Auditing 기능을 포함 @CreatedDate Entity가 생성되어 저장될 때 시간이 자동 저장 @LastModifiedD..

[JPA] QueryMethod 살펴보기
BackEnd/패캠 2022. 1. 30. 00:58

QueryMethod Jpa에서 제공하는 메서드에 +@해서 세부 조건(where)에 해당하는 데이터를 뽑게 해주는 메서드 1. findBy와 동의어들 User findByEmail(String email); User getByEmail(String email); User readByEmail(String email); User queryByEmail(String email); User searchByEmail(String email); User streamByEmail(String email); User findUserByEmail(String email); User findSthByEmail(String email); 2. 서술어 is=equals : 없는것과 동일 Set findUserByName(S..

[JPA] data.sql 설정 / 롬복 / Repository Interface 메소드
BackEnd/패캠 2022. 1. 29. 00:58

- ORM 을 JPA로 실현… 그를 구현한게 Hibernate.. 그 중 spring에 필요한게 spring data jpa data.sql 초기에 실습하고 있는 환경은 in-memory db를 활용하므로 데이터가 영구적으로 기록되진 않는다. but) resources 하위에 data.sql파일(sql 쿼리 파일)을 넣으면 코드 실행 전에 이 파일을 실행시켜서 데이터를 db에 넣어준다. call next value for hibernate_sequence => @generatedValue를 실현시켜줌 ㄴ 이 문장의 삽입 위치와 상관 없이 n번 삽입하면 다음에 혹여나 새로운 객체가 db에 저장되려 할 때 id가 n+1번으로 들어가게 됨. ㄴ data.sql에선 우리가 적어줬지만 h2데이터베이스에서 id를 ..

swagger
BackEnd/패캠 2022. 1. 28. 00:57

: 개발한 REST API를 편하게 문서화 ㄴ 제 3의 사용자가 편리하게 API를 호출, 테스트 할 수 있음 : Springboot 에서는 springfox-boot-starter를 의존성 추가 implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0' - Swagger 어노테이션 - Controller @Api(tags = {"API 정보를 제공하는 Controller"}) @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/hello") public String hello(){ return "hello"; } ..