1 ) UnknownEntityTypeException: Unable to locate persister
EMF.init();
EntityManager em = EMF.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
Review review = new Review("H-01", 5, "작성자", "댓글");
em.persist(review);
...
}
em.persist(review);
에서 오류 발생 persistence.xml
파일에 엔티티가 위치하는 코드를 추가적으로 입력해야 함 2 ) java.sql.SQLSyntaxErrorException: Table 'TableName' doesn't exist
persistence.xml
은 resources/META-INF
경로에 있으면 jpa가 자동으로 인식한다.
<persistence-unit name="jpabegin" transaction-type="RESOURCE_LOCAL">
<class>jpabasic.reserve.domain.User</class>
<class>jpabasic.reserve.domain.Hotel</class>
<class>jpabasic.reserve.domain.Review</class>
<class>jpabasic.reserve.domain.AccessLog</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
...
</persistence-unit>
exclude-unlisted-classes
를 true
로 설정하면 <class>xx</class>
로 명시한 클래스만 엔티티로 로딩한다. false
이면 CLASSPATH에서 자동 탐색한다.
현재 Hibernate가 Java 클래스와 persistence.xml Resource가 존재하는 Classpath가 다를 경우 Entity 자동인식을 못한다. 따라서 명시가 더 확실할 수 있다.
<properties>
<property name="hibernate.hbm2ddl.auto" value="create"></property>
</properties>
데이터베이스 스키마 자동 생성
- DDL을 애플리케이션 실행 시점에 자동 생성한다.
- 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성한다. (개발 단계에서만 사용)
속성 종류
create
: 기존 테이블 삭제 후 다시 생성 DROP + CREATEcreate-drop
: create와 같지만 종료시점에 테이블 DROP (테이블 아예 삭제함) update
: 변경분만 반영(운영DB에는 사용하면 안된다), 추가만 된다. 지워지는건 안됨.validate
: 엔티티와 테이블이 정상 매핑되었는지만 확인none
: 사용하지 않음 주의사항
데이터베이스 방언이란? 🧑🏼💻
스프링 JPA를 사용하여 데이터베이스를 접근 및 관리하는 경우 어플리케이션이 직접 JDBC 레벨에서 SQL 을 작성하는 것이 아니라 JPA 가 직접 SQL 을 작성하고 실행하는 원리이다.
개발자가 사용하기로 결정한 RDBMS 마다 ANSI SQL를 표준으로 두고 있지만 자신만의 독자적인 기능을 가지며 이를 방언(Dialect)이라고 한다.
하이버네이트를 포함한 대부분의 JPA 구현체들은 이런 문제를 해결하기 위해 다양한 데이터베이스 방언 클래스를 제공한다.
Hibernate 데이터베이스 방언 종류
// persistence.xml
<persistence-unit name="jpabegin" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
</properties>
</persistence>
출처
[JPA/Hibernate] persistence.xml 설정 방법 https://atoz-develop.tistory.com/entry/JPAHibernate-persistencexml-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95
JPA persistence.xml Setting https://kha0213.github.io/jpa/jpa-persistence.xml/
JPA Error just for purpose of providing stack trace https://kha0213.github.io/jpa/jpa-error-pk/
exception just for purpose of providing stack trace https://tjdwns4537.tistory.com/55
4. [springboot] hibernate.hbm2ddl.auto 속성 정리 https://dkyou.tistory.com/14
persistence.xml 설정 https://ultrakain.gitbooks.io/jpa/content/chapter2/chapter2.5.html
https://kwonnam.pe.kr/wiki/java/jpa/persistence.xml
[Spring JPA ] 데이터베이스 방언(Dialect) 이란? https://velog.io/@choidongkuen/