반응형

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..

🌿 Spring 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. 오잉???? 이상하네 이 서버는 처음띄우는 서버가 아니라 이전에도 계속 돌아가고있었던 서버고, 사실 커넥션 에러가 날거였으면 요청이 더 많았을 때 에러가 났어야했는데.. 지금은 요청이 상대적으로 적은편인데 에러가 나서 의아해했다 여러가지 이유가 있었겠지만 단편적으로..

🌿 Spring 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..

🌿 Spring 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..

💾 Database 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..

💾 Database 2022.02.21

[JPA] 상속관계 매핑, 공통 속성 매핑

목차 객체의 상속관계 extends로 지원해준다. @Entity public class Item { @Id @GeneratedValue @Column(name = "item_id") private Long id; private String name; private int price; private int stockQuantity; } @Entity public class Album extends Item{ private String artist; } @Entity public class Movie extends Item{ private String director; private String actor; } @Entity public class Book extends Item{ private String..

💾 Database 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) (사용하지말자) 단점! - 엔티티가 ..

💾 Database 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..

💾 Database 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..

💾 Database 2022.02.20
반응형