개발/JPA
-
JPA 기본키 매핑 전략개발/JPA 2022. 7. 20. 12:21
JPA가 제공하는 데이터베이스 기본키 생성 전략은 다음과 같습니다. 직접할당 : 기본 키를 애플리케이션에서 직접 할당한다. 자동생성 : 대리 키 사용 방식 - IDENTITY : 기본 키 생성을 데이터베이스에 위임ㅎ나다. - SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다. - TABLE : 키 생성 테이블을 사용한다. 자동 생성 전략이 이렇게 다양한 이유는 데이터베이스 벤더마다 지원하는 방식이 다르기 떄문입니다. 예를 들어 오라클 데이터베이스는 시퀀스를 제공하지만 MySQL은 시퀀스를 제공하지 않습니다. 따라서 SEQUENCE나 IDENTIFY 전략은 사용하는 데이터베이스에 의존합니다. TABLE 전략은 키 생성용 테이블을 하나 만들어두고 마치 시퀀스처럼 사용하는 방법입니다. 이 ..
-
@Table개발/JPA 2022. 7. 19. 22:15
@Table은 엔티티와 매핑할 테이블을 지정합니다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용합니다. 속성 기능 기본값 name 매핑할 테이블 이름 엔티티 이름을 사용합니다. catalog catalog 기능이 있는 데이터베이스에서 catalog를 매핑합니다. schema schema 기능이 있는 데이터베이스에서 schema를 매핑합니다. uniqueConstraints DDL 생성 시에 유니크 제약조건을 만듭니다. 2개 이상의 복합유니크 재약조건도 만들 수 있습니다. 참고로 이 기능은 스키마 자동 생성 기능을 사용해서 DDL을 만들 때만 사용됩니다. 출처 : 자바 ORM 표준 JPA 프로그래밍(김영한 저)
-
@Entity개발/JPA 2022. 7. 19. 22:10
JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 합니다. 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 지정한다. 보통 기본값인 클래스 이름을 사용한다. 만약 다른 패키지에 이름이 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌하지 않도록 해야 한다. 설정하지 않으면 클래스 이름을 그대로 사용한다 (ex. Member). @Entity 적용 시 주의사항은 다음과 같습니다. 기본 생성자는 필수 final 클래스, enum, interface, inner 클래스에는 사용할 수 없습니다. 저장할 필드에 final을 사용하면 안됩니다. JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하므로 이 생성자는 반드시 있어야 합니다. 출처 : 자바 ORM 표준 JPA..
-
영속성과 영속성컨택스트개발/JPA 2022. 7. 13. 11:03
JPA에서의 영속성 JPA의 핵심 내용은 엔티티가 영속성 컨텍스트에 포함되어 있냐 아니냐로 갈립니다. JPA의 엔티티 매니저가 활성화된 상태로 트랜잭션(@Transactional) 안에서 DB에서 데이터를 가져오면 이 데이터는 영속성 컨텍스트가 유지된 상태입니다. 이 상태에서 해당 데이터 값을 변경하면 트랜잭션이 끝나는 시점에 해당 테이블에 변경 내용을 반영하게 됩니다. 따라서 우리는 엔티티 객체의 필드 값만 변경해주면 별도로 update()쿼리를 날릴 필요가 없게 됩니다. 이 개념을 더티 체킹이라고 합니다. 영속상태란, 영속성 컨텍스트가 관리하는 엔티티 결국 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 뜻이 됩니다. 영속성 컨텍스트란? 영속성 컨텍스트(persistence context) 는 ..
-
Entity 생명주기개발/JPA 2022. 7. 5. 15:32
Entity에는 4가지의 상태가 존재합니다. 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed): 영속성 컨텍스트에 저장된 상태 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed): 삭제된 상태 비영속 엔티티 객체를 생성만 한 순수한 객체 상태이며 아직 저장하지 않은 상태, 따라서 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없습니다. 이것을 비영속상태라 합니다. //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUserName("회원1"); 영속 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장합니다. 이렇게 영속..