[삽질의 기록]
프로젝트 실행 시 자동으로 해당 class의 이름을 가진 DataBase table을 생성해주기 위해 Spring boot + JPA(Hibernate) 를 사용하였다. 하지만 이상하게도 Error creating bean with name 'entityManagerFactory' 메시지가 발생하였다.
우선 pom.xml에 hibernate를 사용하기 위해 dependency를 추가해주었다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
그리고 resource/application.yml 파일에 다음 코드를 추가해주었다.
spring:
jpa:
show-sql: true
h2:
console:
enabled: true
다음으로 User class의 이름을 가진 DB table을 자동으로 생성해주기 위해 User class 위에 @Entity annotation을 추가해준다. 그리고 table의 record를 구분하기 위한 기본 키를 설정을 해야한다. 이 프로젝트의 경우 id 값을 기본 키로 설정하였으며, id가 기본 키 값임을 알려주는 @Id, @GeneratedValue(자동 생성되는 키 값) annotation을 추가해준다. 이렇게 annotation을 설정해주는 것만으로도 우리가 가지고 있는 User의 domain class 정보가 db의 User라는 이름의 table 생성해준다.
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
하지만 이렇게 쉽게 될 리가 없지. 당연히 Error가 발생했다. Error 내용을 살펴보면 결국 specified identifier를 못 찾는다는 것 같은데, User class 보면 분명히 @Id 라는 annotation을 추가해주었다.
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'entityManagerFactory' defined in class path resource
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]:
Invocation of init method failed; nested exception is org.hibernate.AnnotationException:
No identifier specified for entity: com.example.restfulWebService.users.User
몇 번의 삽질을 끝에 결국 해결했다. 나의 경우 "@Id" annotation을 사용할 때 아래 코드와 같이 org.springframework.data.annotation.Id 를 import하여 사용했기 때문에 위와 같은 에러가 발생한 것이었다.
import org.springframework.data.annotation.Id;
org.springframework.data.annotation.Id -> javax.persistence.Id로 변경하여 import를 하면 문제가 해결된다. 또한 Entity의 경우도 org.hibernate.annotations.Entity로 import하게 되면 사용이 안된다. "@Entity " 이렇게 나온다. 따라서 Entity의 경우도 아래와 같이 javax.persistence.Entity를 import하여 사용해야한다.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
이렇게 해결 하면 USER라는 이름의 table이 자동으로 생성된 것을 확인할 수 있다.
'Spring Boot' 카테고리의 다른 글
[Spring Boot] STS에 Lombok 설치 시 무응답 증상 (3) | 2020.08.06 |
---|