본문 바로가기

JPA5

[JPA] 스프링부트 Could not write JSON: Infinite recursion 에러 해결 에러 내용 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through r.. 2021. 12. 31.
[JPA] 변경감지(dirty checking)와 병합(merge) 변경 감지와 병합 변경 감지 - 더티체킹 (엔티티의 값만 바꿔도 JPA가 알아서 update 쿼리) @Transactional 안에 this.setStatus(oderStatus.CANCEL);만 해도 자동으로 update 해줌 영속성 엔티티들에 적영됨. findById로 찾은 엔티티는 영속성 컨텍스트 Book book = itemRepository.findById(param.getId()); 디비에서 참조했기 때문 준영속 엔티티 영속성 컨테스트가 더이상 관리하지 않는 엔티티 엔티티 속성을 바꿔도 변경 감지를 통한 업데이트가 되지 않음. 엔티티를 그냥 Id로 접근한경우 book.setId(form.getId()) 병합 em.merge 디비에서 id 조회를 하고 필드를 모두 바꿔치기함. 준영속 상태를 영속.. 2021. 9. 6.
[JPA] 도메인 및 웹 계층 개발 회원 도메인 개발 엔티티매니저 createQuery 엔티티 객체를 대상으로 jpql 쿼리. 트랜잭션 기본적으로 데이터 변경은 트랜잭션 안에서 일어나야한다. - 서비스에서 메소드 트랜잭셔널을 붙이자 @Transactional javax와 spring중 spring을 import 하자, 기능이 더 많음 @Transactional(readOnly - true) 조회 기능에서 리드온니를 넣어주면 성능 증가. 기본적으로 서비스 클래스를 리드온리로 하고, 수정이 필요한 것에 @Transactional을 따로 붙임 기본적인 @Transactional은 readOnly = false 의존성 주입 @Autowired보단 생성자를 이용하는 방식 생성자만 있어도 스프링이 긱본적으로 @Autowired를 붙여줌 @Requir.. 2021. 9. 6.
[JPA] 도메인 분석 설계 및 아키텍처 도메인 분석 설계 설계 1:N에서 N이 주인. 외래키가 있는 곳을 주인으로 엔티티 클래스 개발 연관관계 주인이 아닌 경우 @OneToMany(mappedBy = "member") 상속 엔티티 상속 관계에서 상속 table type 전략을 정해줘야함. @Inheritance(strategy = InheritanceType.SINGLE_TABLE) 자식들을 하나의 테이블에 생성 @DiscriminatorColumn(name = "dtype") @DiscriminatorValue("A") Enum @Enumerated(EnumType.String) 1대1 관계에서 주인? - 주인을 어디에 둬도 상관 없음 tip) access를 많이 하는 곳에 두자. N대N 관계 - 실무에선 X JoinColumn이 아닌 Jo.. 2021. 9. 6.