JPA(7)
-
Repeated column in mapping for entity 에러 해결
프로젝트를 진행하면서 특정 엔티티에 동일한 엔티티 필드를 2개 이상 있는 경우가 생겼다. 아래 그림 1을 보면 Member 엔티티를 2개의 필드가 있다.(Member pt, Member writer) 처음에는 @JoinColumn의 name 속성을 연관관계가 있는 엔티티(Member)의 PK값의 @Column의 name값과 무조건 동일하게 설정해줘야 한다고 생각했다.(여기서는 MEMBER_ID) 하지만 그렇게 하면 아래 그림 2처럼 오류가 발생하게 된다. @JoinColumn에 대해서 잘못 이해하고 있었고 제대로 이해하기 위해서 찾아보게 되었다. @JoinColumn @joinColumn은 어노테이션이 붙은 필드의 엔티티를 추적해서 그 엔티티(Member)의 PK와 Join 시켜준다. @joinColum..
2022.04.18 -
could not initialize proxy 오류 해결
https://cantcoding.tistory.com/78 JPA/ could not initialize proxy - no Session 1.문제점 JPA를 통한 개발을 하다보면 한번쯤 만날 수 밖에없는 에러이다. JPA를 사용하여 DB에 저장된 리소스를 불러와서 반환하는 경우, 혹은 사용할 때 발생했던 에러이다. 2.접근 JPA에 대한 이 cantcoding.tistory.com
2022.04.04 -
[assertJ] isEqualTo vs isSameAs 비교
테스트 코드 작성 중 asserThat().isEqualTo랑 asserThat().isSameAs의 차이점이 궁금해서 찾아보게 되었다. 결과부터 말하자면 - isEqualTo : 값 자체를 비교하는 것이다 (ex. 5 == 5, "a" == "b") -> 동등성 비교 - isSameAs : 객체 참조 주소값을 비교하는 것이다. (ex Car a , Car b => a==b) -> 동일성 비교 아래의 그림 2, 3의 코드를 보면 더 자세히 이해할 수 있을것이다.
2022.03.30 -
@Transactional,@Commit
JPA에서 DB 연산(C,R,U,D)은 Transaction 단위 안에서 실행된다. 즉, 트랜잭션이 없는 연산은 실행될 수가 없다. JPA에서는 @Transactional라는 어노테이션을 제공하여 트랜잭션 기능을 제공한다. 실제 코드를 보면서 이해해 보자! 아래의 실제 테스트를 진행 중 그림 1과 같이 오류메시지가 나타났고 확인해 보니 "현재 스레드에 엔티티 매니저가 없다 그래서 persist 함수를 호출할 수가 없다"라는 에러 메시지가 뜬것을 확인할 수 있다. 앞에서 언급했듯이 JPA는 Transcation 단위 안에서 실행되므로 @Transactional 어노테이션을 입력해주면 실행이 된다! @Transactional 어노테이션을 추가 후 실행하였다.(그림 2 참고) 그런데... 실행은 잘 됐는데 D..
2022.03.30 -
@Not Null vs @Column(nullable = false) 차이 비교
특정 테이블의 컬럼을 Not Null으로 설정이 필요할 때 JPA에서 @Not NUll 컬럼과 @Column(nullable = false)를 지원한다. (nullable의 디폴트는 true 값이다) 그러면 어떤 차이점이 있고, 어떤 것이 더 효율적일까? @Not Null부터 알아보자 @Not null 먼저 그림 1처럼 Member 엔티티를 만들고 birthday 필드를 @NotNull로 매핑하였음 @NotNull 테스트를 위해 Member 객체를 하나 만들고 birthday를 null로 하여 테스트 실행을 해보자. 아래의 실행 결과를 보면 javax.persistence.RollBackException과 javax.validation.ConstraintViolationExcept 예외가 발생하였음 그리..
2022.03.24 -
하이버네이트 자동 키 생성 전략
현재 JPA(Hibernate) + Mysql로 연동하는 프로젝트를 진행 하던 중 아래의 그림 1을 보고 왜 저 테이블을 만들지?? 라는것이 궁금해서 구글링을 통해찾아보게 되었다. DB는 테이블의 기본 키(PK)를 선정 할 때 두가지 방법이 있는데, 자연키(ex. 주민등록번호, 이메일 등) 와 대체키(의미없는 일련의 번호)로 구성된다. JPA는 테이블을 생성할 때 기본 키를 대체키로 생성한다. (사용법은 아래 소스코드 참조) @Entity @Getter @Setter public class test{ @Id @GeneratedValue //@GeneratedValue == @GeneratedValue(strategy = GenerationType.Auto) private int id; } 테이블 생성전략..
2022.03.24