변수 사용시 private final x = 100; 한번 초기화되는 경우 값을 변경할 수 없다. 변경되지 않는 상수를 정의가능 VO 나 엔티티의 경우 수정되지 않아야하는 경우가 대부분이기에 final 키워드를 변수에 많이 사용한다라고 생각할수있지만, VO 나 엔티티는 거의 final 키워드의 사용을 못한다. 엔티티의 경우 지연로딩이 존재하는데, 프록시 객체를 생성 -> 프록시 객체에서 리플렉션 API 수행 리플렉션 수행시 -> 기본 생성자와 setter 가 필요한 상황 하지만 final 은 기본적으로 setter 를 사용할 수 없음. VO 의 경우에는 로직에 따라 초기화 시점에 , 애초에 모든 객체나 데이터를 들고오지 못하는 경우가 있기에, 사용하기 까다롭다.. 메서드에 사용되는 경우 public fi..
DDL 생성 기능JPA 는 어플의 엔티티 구조를 바탕으로 DB 스키마를 자동으로 생성할 수 있는 기능을 제공한다.개발자는 별도의 DDL을 작성할 필요 없이 어플의 도메인 모델만 관리하면 된다.회원 이름에 대한 제약조건의 추가회원의 이름 필수 입력10자 초과 X 제약 조건 추가@Entity @Table(name="MEMBER") public class Member { @Id @Column(name = "ID") private String id; @Column(name = "NAME", nullable = false, length = 10) private String username; }DDLCREATE TABLE member ( id VARCHAR(255) NOT NULL, name VARCHAR(10) ..
일대일 관계 구성시객체지향 개발자들은 주 테이블에 외래 키를 선호한다.단방향 관계회원과 사물함의 일대일 관계MEMBER 테이블은 주 테이블LOCKER 테이블은 대상 테이블 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String username; @OneToOne @JoinColumn(name = "LOCKER_ID") private Locker locker; }@Entity public class Locker { @Id @GeneratedValue @Column(name = "LOCKER_ID") private Long id; private String name; ..
개요@ManyToMany 를 사용하면, 연결 테이블의 관리를 자동화하여 도메인 모델의 단순화를 가능하게 함하지만,실무에서는 이러한 매핑을 그대로 사용하지 않는다.회원이 상품을 주문하는 경우 연결 테이블에 회원 아이디와 상품의 아이디만 저장하는 케이스만으로 충분치 않음.주문 수량, 주문 날짜 등과 같은 추가 정보가 필요하다..연결 테이블에 필드를 추가연결 테이블을 직접 매핑하는 연결 엔티티를 별도 생성해당 엔티티에 추가 필드를 매핑해야함.Member 엔티티에서..@OneToMany(mappedBy = "member") private List memberProducts = new ArrayList();MemberProduct 연결 엔티티까지@Getter @Setter @Entity @Table(name = ..
DB 각 테이블은 고유한 PK를 가짐JPA 사용시 해당 기본 키를 엔티티에 매핑가능하다.직접 할당@Id 어노테이션만 사용하여 기본 키 직접 할당 가능@Entity public class Member { @Id @Column(name = "ID") private String id; }데이터베이스 자동 생성 전략항상 어플의 기본 키 값을 직접 할당하는 적인 비효율적일 수 있음특히 높은 동시성 환경에서는 중복 키 충돌 위험이 있음.데이터 베이스가 제공하는 자동 생성 기능을 활용하는 것이 좋음데이터 베이스 기본 키 생성 전략..직접 할당어플리케이션에서 기본 키 할당IDENTITY기본 키 생성을 데이터 베이스에 위임TABLE키 생성 테이블 사용@GeneratedValue 어노테이션을 사용하면 원하는 기본 키 생성..
기본 키 직접 할당 전략기본키를 직접 할당하기 위해 @Id 어노테이션 사용@Id @Column(name="id") private String id;@Id 어노테이션은 자바 기본자바 래퍼Stringutil.Datesql.Datemath.BigDecimalmath.BigInteger직접 할당 전략은 어플 내에서 기본 키 직접 할당하고 엔티티를 저장하기 전에 이를 수행Board board = new Board(); board.setId("id1"); em.persist(board);IDENTITY 전략기본 키 생성을 DB에 위임MYSQL, PostgreSQL , SQL server 등에서 사용CREATE TABLE BOARD ( ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, D..