BackEnd(Java)/Spring Data JPA(10)
-
JPA - Mysql 컬럼 매핑
JPA와 DB의 컬럼매핑을 검색해보다가 좋은 블로그를 찾게 되었다. Java DB 숫자 Byte tinyint(4) Short smallint(6) Integer int(11) Long bigint(20) BigDecimal decimal(19,2) Float float Double double Boolean bit(1) 날짜/시간 Date LocalDate date Timestamp LocalDateTime datetime Time time 문자열 String varchar(255) Clob longtext Byte[][2] tinyblob Blob longblob 출처 : https://ksy93.tistory.com/entry/Jpa-Mysql-column-%EC%9E%90%EB%A3%8C%ED%9..
2022.03.24 -
@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 -
영속성 컨텍스트와 Transaction의 관계
프로젝트를 진행하면서 영속성 콘텍스트를 정확히 알고 쓰지 못해 생긴 이슈에 대해서 정리하고자 한다. 결론부터 말하자면, 영속성 컨텍스트와 트랜잭션 생존 범위가 동일하고, 트랜잭션이 같으면 같은 영속성 컨텍스트를 사용한다. 그러나 트랜잭션이 다르면 다른 영속성 컨텍스트를 사용하게 된다(그림 1참고) 이 개념을 이해하고 꼭 개발하도록 하자!!!!!!!(정확히 이해를 하지 못한채 API 서버 개발할 때 잦은 로직 변경이 있었음 ㅠㅠ) 이슈 - 하나의 트랜잭션이 끝난 후 그 값을 다른 트랜잭션에서 연산(persist, remove... 등)하려고 하면 영속화되지 않은 엔티티를 어떠한 행위를 하려고 해서 오류가 뜨게 된다. 해결방법 다른 트랜잭션에서 연산하기 전에 em.find를 통해 영속성 컨텍스트에서 가져와서..
2022.03.23