반응형

JPA 10

[SpringBoot] UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only 해결후기

목차 상황 1. 이벤트에 당첨된 경우 휴대폰번호를 입력하고 [쿠폰받기] 버튼을 누르면 쿠폰이 즉시 발송된다. 2. 근데 가끔씩 [쿠폰받기] 버튼이 눌린채로 아무런 반응이 없는 경우가 있다. (브라우저 자체가 멈춘다던가... 아무런 액션 없이 그냥 대기만 한다던가...) 3. 기다려도 응답이 없으니 사람들은 [쿠폰 안받기] 버튼을 누른다. 4. [쿠폰 안받기] 버튼을 누르면 당첨내역을 초기화시킨다. (다른사람에게 할당되어야하므로) 서버에 찍힌 로그는 아래와 같다. 2022-12-05 10:45:24 쿠폰받기 시작 2022-12-05 10:45:25 쿠폰안받기 시작 2022-12-05 10:45:25 쿠폰받기-쿠폰발송 성공 2022-12-05 10:45:26 쿠폰안받기 종료 2022-12-05 10:45:2..

Backend 2022.12.06

[SpringBoot] Jpa Connection Minimum-Idle 설정하지 말자... 에러 후기

한동안 DB에 커넥션에러가 발생했어서 maximum-pool-size를 설정주었는데 minimum-idle 셋팅도 있어서 같이 셋팅해주었었다. spring: datasource: hikari: ... minimum-idle: 5 maximum-pool-size: 10 그런데..... 처음보는 에러가 발생했다 HikariPool-1 - Connection is not available, request timed out after 45005ms. 오잉???? 이상하네 이 서버는 처음띄우는 서버가 아니라 이전에도 계속 돌아가고있었던 서버고, 사실 커넥션 에러가 날거였으면 요청이 더 많았을 때 에러가 났어야했는데.. 지금은 요청이 상대적으로 적은편인데 에러가 나서 의아해했다 여러가지 이유가 있었겠지만 단편적으로..

Backend 2022.12.04

Spring Jpa SelfJoin 순환참조 방지하며 다른 엔티티와 맵핑하기

목차 보통 셀프조인은 카테고리처럼 1차, 2차, 3차.... 무한정으로 늘어날 수 있을 때 사용되는데, 하나의 테이블로 모든 관계를 정의할 수 있어서 유용하게 쓰인다. 셀프조인 형태로 구현한 카테고리 엔티티와 메뉴 엔티티를 맵핑하고 Json을 내려주는 과정에서 어떻게 순환참조를 피할 수 있을까?? 예시데이터 카테고리 메뉴 내가 원하는 응답값 카테고리 { "message": "카테고리 정보를 조회하였습니다.", "data": { "id": 2, "categoryCode": "soup_stews", "categoryName": "찜_탕_찌개", "parent": { "id": 1, "categoryCode": "koreanfood", "categoryName": "한식", "parent": null, "ch..

Backend 2022.11.09

[JPA] 값 타입(기본값, @Embedded, 값타입 컬렉션)

목차 기본값 타입 단순히 값으로만 사용하는 기본 타입이나 객체이다. 식별자가 없고 값만 있기때문에 변경 추적 불가능하다. 임베디드타입 엔티티이지만, 기본값처럼 단순히 값으로만 사용하는 객체이다. = 변경 추적 불가능하다. @Embeddable : 값을 정의하는 곳에 표시 @Embedded : 값을 사용하는 곳에 표시 기본 생성자를 필수로 만들어주어야한다. @Entity public class Member{ @Id @GeneratedValue @Column(name="member_id") private Long id;//값 타입 private String name;//값 타입 private String city; private String street; private String zipcode; } cit..

Backend 2022.02.22

[JPA] 프록시와 즉시로딩, 지연로딩 / 영속성 전이와 고아객체

목차 em.getReference() 메서드 @Entity public class Member{ @Id @GeneratedValue @Column(name="member_id") private Long id; private String name; @ManyToOne @JoinColumn(name="team_id") private Team team; private static void printMember(Member member){ System.out.println("member : " + member); } private static void printMemberAndTeam(Member member){ System.out.println("member : " + member); System.out.pr..

Backend 2022.02.21

[JPA] 다양한 연관관계 매핑(다대일, 일대일, 다대다)

목차 다대일 / N:1 / @ManyToOne / N이 주인인 경우 외래키가 있는 쪽이 주인 N이 주인 : @ManyToOne, @JoinColumn(name = "~") (양방향인 경우) 1이 서브 : @OneToMany(mappedBy = "~") 일대다 / 1:N / @OneToMany / 1이 주인인 경우 외래키가 있는 쪽이 주인...이어야하는데 객체와 테이블의 차이 때문에 반대편 테이블의 외래키를 관리하는 특이한 구조 1이 주인 : @OneToMany, @JoinColumn(name = "~") (양방향인 경우) N이 서브 : @ManyToOne, @JoinColumn(name = "~", insertable = false, updatable = false) (사용하지말자) 단점! - 엔티티가 ..

Backend 2022.02.21

[JPA]영속성 관리 : 내부 동작 방식

목차 영속성 컨텍스트? 영속성 컨텍스트는 논리적인 개념이다. 엔티티매니저를 통해서 영속성 컨텍스트에 접근한다. - J2EE 같은 환경 엔티티매니저와 영속성 컨텍스트가 1:1 관계. 엔티티매니저 안에 영속성 컨텍스트가 1개 있다. - 스프링 프레임워크 같은 컨테이너 환경 엔티티매니저와 영속성 컨텍스트가 1:N 관계. 여러 엔티티매니저를 통해 1개의 영속성 컨텍스트에 접근한다. 영속성 컨텍스트 구조 1. Map형태의 1차 캐시 공간 : transaction.commit()전까지 값을 모아놓는다. 2. 쓰기지연 SQL저장소 : transaction.commit()전까지 SQL문들을 모아놓는다. em.persist(memberA) 하면 - insert SQL문을 쓰기지연 SQL저장소에 저장하고, - member..

Backend 2022.02.21

[JPA] 연관관계 매핑

목차 목표 : "객체의 참조와 테이블의 외래키를 매핑" 시나리오 - 회원과 팀은 다대일 관계이다. - N명의 회원은 1개의 팀에 소속될 수 있다. - 1개의 팀은 N명의 회원을 가질 수 있다. 객체를 테이블에 맞추어 모델링 : 외래키를 그대로 객체에 구현 Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setName("member1"); member.setTeamId(team.getId());//⭐⭐⭐ 식별자 저장 em.persist(member); Member findMember = em.find(Member.class, member.getId()); Team findT..

Backend 2022.02.20
반응형