본문 바로가기
728x90

JPA8

트랜잭션 예외처리 롤백 개인 프로젝트를 하며 만났던 당황스러운 상황에 대해서 포스팅을 해보려고 합니다. 결론부터 말씀드리면 트랜잭션 사용 중 예외가 발생하면 롤백이 발생하는데 unCheked예외일 경우에만 롤백이 발생한다! 입니다. 간단한 예시 상황을 만들어 보겠습니다. (학습목표 포함!) 멤버와 팀이 존재한다. 팀을 저장할 때 멤버를 함께 생성한다. 팀은 성공적으로 insert쿼리가 나갔고 멤버를 저장하는 타이밍에 예외가 발생한다. 이때 checkedException과 unCheckedException이 발생했을 때 어떻게 다른지 확인해보자~ 우선, 제가 잘못 알고 있었던 부분은 '예외의 따라서 롤백이 되는 것이 아닌 예외가 발생하면 무조건 롤백' 입니다. 따라서, 위의 상황에서 4번에 상관없이 무조건 팀도 롤백이 되는 줄 .. 2024. 4. 1.
Cascade, OrphanRemoval 사용 주의 이번에 특정 기능을 개발한 후 만났던 버그에 대한 정리 및 회고 포스팅입니다~! 상황 설명 ㅠㅠ 기존에 A 라는 객체에 대해서 생성, 삭제, 수정의 기능이 있었습니다. 이때, 저는 A를 복사하는 기능을 개발했었습니다. 정말 엄청난 고생을 하면서 복사하는 기능을 만들고 테스트하고 QA팀도 통과하고 배포 후 테스트까지 성공하면서 다행이다~! 라는 생각을 하고 앞으로 행복한 날만 남았다고 생각하며(물론... 저의 첫 기능 개발이었지만 ㅎㅎ) 행복한 주말을 보내고 월요일에 출근을 했습니다. 이때.... 갑자기 A의 특정 값을 지우고 업데이트를 할 때 특정 값이 지워지지 않는 버그가 발생한다는 소식을 들었고 저는 급하게 원인을 분석하게 되었습니다. 그리고... 그 다음날 급하게 핫픽스를 진행하게 되었습니다...... 2022. 2. 5.
JPA 엔티티 매핑 - 필드와 컬럼 매핑 이번 포스팅에서는 필드와 컬럼 매핑에 대해서 알아보겠습니다. Member 엔티티를 만들어 보겠습니다. package hellojpa; import javax.persistence.*; import java.util.Date; @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) private Date createDate; @Temporal(TemporalType.TIMESTAMP) pri.. 2021. 11. 23.
JPA 엔티티 매핑 - 데이터베이스 스키마 자동 생성 이전 포스팅에 이어 jpa 엔티티 매핑 중 데이터베이스 스키마 자동 생성에 대해서 알아보겠습니다. jpa를 사용하면 DDL을 애플리케이션 실행 시점에 자동 생성합니다. 테이블 중심 -> 객체 중심 데이터베이스 방언을 활용해서 데이터베이스 맞는 DDL을 생성합니다. DDL은 개발 장비에서만 사용하는게 좋습니다. hibernate.hbm2ddl.auto 옵션 설명 create 기존테이블 삭제 후 다시 생성(DROP + CREATE) create-drop create와 같으나 종료시점에 테이블 DROP update 변경분만 반영 validate 엔티티와 테이블이 정상 매핑되었는지 확인 none 사용하지 않음 추가 설명 create를 사용할 경우 기존의 테이블을 drop한 후 새로운 create 명령어가 사용된.. 2021. 11. 16.
JPA 엔티티 매핑 - 소개 및 객체와 테이블 매핑 이번 포스팅은 JPA의 엔티티 매핑에 대해서 알아보겠습니다. 먼저, 엔티티 매핑 소개가 있겠습니다. 객체와 테이블 매핑 : @Entity, @Table 필드와 테이블 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn ... 객체와 테이블 매핑 @Entity - @Entity가 붙은 클래스는 JPA가 관리합니다. => 엔티티라고 부릅니다. - JPA를 사용하기 위해서는 클래스에 꼭 @Entity를 붙여줘야 합니다. - 기본 생성자가 필수입니다!! 하지만 생성자가 아무것도 없다면 자동으로 기본 생성자를 만들어 줍니다. 따라서 특정 파라미터가 있는 생성자가 필요하다면 기본 생성자를 만들어줘야 합니다. - final ,enum,interface ,inn.. 2021. 11. 15.
jpa - 플러시, 준영속 상태 플러시 jpa의 플러시에 대해서 알아보겠습니다. 플러시란 - 영속성 컨텍스트의 변경내용을 데이터베이스에 반영합니다. 플러시가 발생할 때 - 변경 감지 - 수정된 엔티티 쓰지 지연 SQL 저장소에 등록 - 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시하는 방법 - em.flush() - 직접호출합니다. - 트랜잭션 커밋 - 플러시를 자동 호출합니다. - JPQL 쿼리 실행 - 플러시 자동 호출 Member member = new Member(200L, "memberA"); em.persist(member); em.flush(); System.out.println("======짠======"); tx.commit(); 위의 코드를 실행할 경우 위의.. 2021. 10. 16.
728x90