일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 백준 19238
- re.split
- MySQL
- 백준
- with recursive
- 백준 17626
- JPA
- MSA
- 백준 파이썬
- spring cloud
- JVM
- 백준 16719
- java
- Spring
- 백준 17779
- Coroutine
- spring oauth
- 백준 16236
- spring security
- Spring Boot
- sql 기술면접
- Kotlin
- 백준 16235
- springboot
- 백준 15685
- 프로래머스
- 파이썬
- java 기술면접
- 프로그래머스
- 웹어플리케이션 서버
- Today
- Total
목록Programming/JPA (11)
시작이 반
이전에 영속성에 대해서 이런거구나 하고 넘어갔는데 막상 누가 물어보면 대답을 못했다... 때문에 이번에 정리해보고 넘어가보자 영속성 컨텍스트란? 영속성 컨텍스트란 엔티티를 영구 저장하는 환경 이라는 뜻이다. 어플리케이션과 데이터베이스 사이에 객체를 보관하는 가상의 데이터베이스 같은 역할이라고 한다. EntityManager에 의해서 관리되는 상태가 바로 영속성 상태이다. 영속성의 상태는 3가지 이다. 영속(Managed) : 영속성 컨텍스트에 저장된 상태 준영속(Detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(Removed) : 삭제된 상태 EntityManager entityManager = new EntityManager(); Test test = new Test(); // 비영..
OSIV ON 최초 데이터베이스 커넥션 시작부터 API응답이 끝날 때 까지 영송성 컨텍스트와 데이터베이스 커넥션 유지 만약 Controller에서 외부 API를 호출하면 API대기 시간만큼 커넥션 리소스 반환 못함 - 자원낭비 OSIV OFF 트랜잭션을 종료할 떄 영송성 컨텍스트를 닫고, 데이터베이스 커넥션도 반환 - 리소스 낭비x 지연로딩을 트랜잭션 안에서 처리해야함 OSIV를 끄면 컨트롤러에 있던 로직들을 서비스로 옮겨서 Transactional(readOnly = true)를 사용하여 로직을 사용한다. ex) OrderService OrderService: 핵심 비즈니스 로직 OrderQueryService: 화면이나 API에 맞춘 서비스 (주로 읽기 전용 트랜잭션 사용) 고객 서비스의 실시간 AP..
페치 조인(fetch join)은 엔티티를 한번에 조회하게 최적화를 해준다. x To one 관계에서는 join fetch 를 해도되지만 one To many 에서는 Data 수가 many쪽에 맞춰 지면서 뻥튀기가 된다. public class Order { @Id @GeneratedValue @Column(name = " order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List orderItems = new ArrayList(..
Table 정보 orders member delivery 찾을 api 정보 : orders @GetMapping("/api/v2/simple-orders") public List orderV2(){ //ORDER 2개 List orders = orderRepository.findAllByString(new OrderSearch()); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) .collect(Collectors.toList()); return result; } 결과: api정보 @Data static class SimpleOrderDto{ private Long orderId; private String name; private Loc..
생각나는 것 정리... XToOne 일 경우에는 LAZY 설정을 해야 한다.!!!! 꼭 @XToOne (fetch = FetchType.LAZY) 양방향 연관 관계일 때 API로 호출이 된다면 무한루프가 일어날것이다. public class Order { @Id @GeneratedValue @Column(name = " order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; } public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @OneToMany(..
준영속성 상태만드는 법 em.detach(entity) 특정 엔티티만 준영속 상태로 전환 em.clear() 영속성 컨텍스트를 완전히 초기화 em.close() 영속성 컨텍스트를 종료 준영속 엔티티? 영속성 컨텍스트가 더는 관리하지 않는 엔티티 ex) 임의로 만들어낸 엔티티가 식별자를 가지고 있는경우, db에서 데이터를 찾아 해당 데이터로 new Entity()를 만든 엔티티 준영속성 엔티티를 수정하는 2가지 방법 변경 감지 기능 사용 병합 사용 변경 감지 기능 사용 @Transactional void update(Item itemParam) { //itemParam: 파리미터로 넘어온 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId())..
유튜브 강의를 듣다가 Entity를 Client, Controller, Service단을 모두 사용하는 것을 보고 Entity는 Client, Controller단에서 쓰이면 안된다는 것을 본적이 있어서 DTO, Entity의 관계에 대해 찾아봤다. (이미 강의를 들으면서 작성한 코드는 모두 Entity로 접근을 하였기 때문에 나중에 DTO로 바꾸는 리팩토링 작업을 한꺼번에 행봐야겠다.) Entity는 Controller, Client단에서 쓰이면 직접 쓰이면 좋은 설계가 아니다. Entity를 DTO로 바꿔 사용해야한다. Entity DB에 저장하기 위해 유저가 정의한 클래스 - Domain 실제 DB테이블과 매칭 RDBMS에서 Table을 객체화 시킨것 이라고 생각... setter금지 @Getter..
방향 단방향, 양방향 테이블은 외래 키 하나로 조인을 사용하여 양방향으로 쿼리가 가능하므로 사실상 방향이라는 개념이 없다. 하지만 JPA에서는 그 개념이 존재한다. 단뱡향일 때는 한쪽에서만 관계를 참조해 조회해올 수 있고, 양방향일 때는 양쪽이 참조하고 있어서 양쪽에서 조회해 올 수 있다. 객체 관계에서 한 쪽만 참조하는 것을 단방향, 양쪽이 서로 참조하는 것을 양방향 관계라고 한다. 다중성 다대일(@ManyToOne), 일대다(@OneToMany), 일대일(@OneToOne), 다대다(@ManyToMany) *주로 다대일 일대다를 많이쓴다. 연관관계의 주인 테이블은 외래키 하나로 두 테이블의 연관관계를 갖는다. 하지만 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데 이다. JPA는 두 객체 연..