들어가며JPA 학습을 하기 이전에는 MyBatis를 사용했는데 MyBatis도 이점이 많았다.SQL을 별도로 관리해 코드의 가독성을 높여주고, 동적 쿼리 또한 편의 메서드를 지원해주면서 SQL을 지속적으로 학습할 수 있는 것이 큰 매력이였다.그래서 인지 JPA를 학습하는 것에 대한 필요성, 욕구를 잘 못느끼게 되었는데, 학습을 하면서 충격을 크게 받았다. 필자가 느낀 JPA의 큰 매력 2 가지객체의 데이터를 변경하면 별도의 SQL 없이 DB 상의 데이터도 변경준다.객체안에 객체가 있을 때 CASCADE 옵션 하나 만으로 영속성 전이를 지정할 수 있고, 각각 저장하지 않고 상단의 객체만 저장하면 모든 테이블에 값이 저장이 된다. (아래 코드블럭 참조)- OrderRepository의 save메서드에는 ..
DB/JPA

RDB 에서는 다른 테이블의 PK를 참조하는 FK를 설정해두면 해당되는 2 테이블은 양방향 관계를 갖는다. 현재 두 클래스를 보면 Memer 클래스에서 team_id를 이용해 해당 Member의 Team을 참조할 수 있지만,Team에 소속한 Member 객체를 볼 수 있는 코드는 존재 하지 않는다.해당 코드 처럼 Team 객체에 List를 추가하면 Team에 소속된 맴버를 조회할 수 있게 된다.하지만 이후, Member나 Team의 List 에서 꺼낸 값들 중 하나를 수정해야 한다면어떤 Member를 수정해야 할지 모호하다. 이럴 때 해당 연관 관계의 주인을 정해야 하는데 연관 관계의 주인이 되지 않는 객체에 mappedBy를 설정해주면 된다.이럴 때, 하나의 법칙을 지정해서 mapeedBy를 한 ..
기본 키 매핑 방법직접 할당 : @Id만 사용자동 생성(@GenerateValue)strategy =IDENTITY: DB에 위임, MYSQL SEQUNCE: DB sequnce object 사용, ORACLE@SequnceGenerator 필요TABLE: 키 생성용 테이블 사용, ALL RDB@TableGenerator 필요AUTO: 방언에 따라 자동 지정, Default IDENTITY 전략기본 키 생성을 DB에 위임주로, MySQL, PostgreSQL, SQL Server, DB2에서 사용ex: MySQL의 AUTO_INCREMENTJPA는 보통 트랜잭션 커밋 시점에 INSERT SQL을 실행하는데 이 경우 commit 전 까지 pk를 알 수가 없다.해당 전략을 사용할 때는, persist 실행 ..
데이터베이스 스키마 자동 생성 (hibernate.hbm2ddl.auto)DDL을 애플리케이션 실행 시점이 자동 생성된다.테이블 중심 -> 객체 중심데이터베이스 방언을 활용해서 DB에 맞는 적절한 DDL을 생성해준다.해당 기능은 개발 장비에서만 사용해야한다.운영 서버에서는 사용하지 않거나, 적절히 다듬도록 하는게 좋다.hibernate.hbm2ddl.auto (상세 하단 테이블 참조)옵션설명create기존 테이블 삭제 후 다신 생성 (Drop 후 Create)create-dropcrate와 같으나 종료시 점에 DROPupdate변경분만 반영(운영 DB에는 사용 X) - alter tablevalidate엔티티와 테이블이 정상 매핑되었는지만 확인none사용하지 않음 제약조건 추가@Column 을 이용해 u..