JPA 가 관리하는 클래스 JPA 를 사용하기 위해서는 반드시 Entity 어노테이션을 붙여줘야 한다.
파라미터가 없는 기본 생성자를 반드시 생성해줘야 한다.
final 클래스, enum, interface, inner 클래스 에는 사용이 불가능 하다.
저장할 field 에 final 키워드는 사용이 불가능하다.
@Table
Table 어노테이션은 Entity 와 매핑할 Database Table 을 지정한다.
이름
기능
기본 값
name
매핑할 테이블 이름
Entity 이름을 사용
catalog
DataBase 에 catalog 매핑
schema
DataBase 에 schema 매핑
uniqueConstraints
DDL 생성시에 유니크 제약 조건 생성
DataBase 스키마 자동 생성
DDL 을 애플리케이션 실행 시점에 자동 생성
운영 서버에서는 create, create-drop, update 속성을 사용해서는 안된다.
테이블 중심 –> 객체 중심
데이터 베이스 방언을 활용해서 데이터 베이스에 적절한 DDL 을 생성한다.
옵션
설명
create
기존 테이블을 DROP 한 후 CREATE 한다. (어플리케이션 종료한 후에도 테이블 유지)
create-drop
기존 테이블을 DROP 한 후 CREATE 한다. (어플리케이션 종료시점에 테이블 DROP)
update
기존 테이블을 DROP 하지 않고 변경된 부분만 반영 (ALTER)
validate
Entity 와 Table 이 정상적으로 매핑 됐는지 확인한다.
none
아무 작업도 진행하지 않는다.
create
기존 테이블을 DROP 한 후 CREATE 한다.
Hibernate: drop table Member if exists Hibernate: create table Member ( id bigint not null, name varchar(255), primary key (id) )
create-drop
기존 테이블을 DROP 한 후 CREATE 한다. (어플리케이션 종료시점에 테이블 DROP)
Hibernate: drop table Member if exists Hibernate: create table Member ( id bigint not null, name varchar(255), primary key (id) ) Hibernate: /* select m from Member as m */ select member0_.id as id1_0_, member0_.name as name2_0_ from Member member0_ limit ? offset ? Hibernate: drop table Member if exists
update
기존 테이블을 DROP 하지 않고 변경된 부분만 반영 (ALTER)
Hibernate: alter table Member add column age integer not null
validate
Entity 와 Table 이 정상적으로 매핑 됐는지 확인한다.
SchemaManagementException
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: hello] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1016) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:942) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.JpaMain.main(JpaMain.java:13) Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing column [location] in table [Member] at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:136) at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:42) at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:89) at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:68) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:191) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939) ... 4 more