인프런 커뮤니티 질문&답변

김스껄님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

필드와 컬럼 매핑

roletype값 관련 질문

작성

·

564

0

  1. JpaMain 코드

2. Member 부분 코드

package hellojpa;
import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@Entity
public class Member {

@Id
private Long id;
@Column(name = "name")
private String username;

private Integer age;

@Enumerated(EnumType.STRING)
private RoleType roleType;

@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;

@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;

@Lob

private String description;
//Getter, Setter…
public Member() {
}

public void setId(Long id) {
this.id = id;
}

public void setUsername(String username) {
this.username = username;
}

public void setAge(Integer age) {
this.age = age;
}

public void setRoleType(RoleType roleType) {
this.roleType = roleType;
}
}

3. rolltype 부분


4. persist 설정

이렇게 설정을 두고, db 저장 부분을 실행해 보았을때, 다음과 같은 결과가 나왔습니다.

또한, 설정값을 update로 바꾸었을때는, 다음과 같이 에러가 발생했습니다. 

 

  1. 왜 rolltype부분이 강사님처럼 숫자가 아닌 텍스트가 그대로 뜨는지,
  2. 왜 update에서 강사님처럼 성공적으로 뜨지 않고 에러가 나는지 알 수 있을까요?
  3.  

답변 2

0

김스껄님의 프로필 이미지
김스껄
질문자

Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275)

at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)

at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)

at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175)

at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)

at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)

at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)

at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:173)

at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127)

at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460)

at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494)

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:10)

Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect

at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48)

at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:37)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)

at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:131)

at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:42)

at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:62)

at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:457)

at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:323)

at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:297)

at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:501)

at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:101)

at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:76)

at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:107)

at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246)

at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)

at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:146)

at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)

at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)

at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)

at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)

... 14 more

Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken: "java.net.SocketTimeoutException: connect timed out: localhost" [90067-214]

at org.h2.message.DbException.getJdbcSQLException(DbException.java:678)

at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)

at org.h2.message.DbException.get(DbException.java:212)

at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:437)

at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:325)

at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122)

at org.h2.Driver.connect(Driver.java:59)

at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:39)

... 29 more

Caused by: java.net.SocketTimeoutException: connect timed out

at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)

at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107)

at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)

at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)

at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)

at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

at java.base/java.net.Socket.connect(Socket.java:608)

at org.h2.util.NetUtils.createSocket(NetUtils.java:135)

at org.h2.util.NetUtils.createSocket(NetUtils.java:99)

at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:130)

at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:433)

... 33 more

이렇게 에러 메세지가 뜹니다!!

h2키고 실행시킨걸까요?

김스껄님의 프로필 이미지
김스껄
질문자

넵 분명히 실행 시키고 진행했습니다!!

윈도우를 사용중이신 것 같습니다.

C/USERS/계정명/test.mv.db

아래의 c드라이브 -USERS- 계정명- 디렉토리에 접근하면 test.mv.db가 보이실텐데요, 이 파일을 삭제하시고 

https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.3ryn0qha48vi

 

자주하는질문 "해결방안2"에서 설명하는 db파일을 직접 생성하셔서 확인해주세요.

강의 수강하시면서 테스트한 데이터로 인해 발생하는 문제인 것으로 예상하는데 이 부분은 확인이 필요해서요.

 

 

김스껄님의 프로필 이미지
김스껄
질문자

해결했습니다! 알아보니 update 옵션에서만 오류가 나는게, hibernate와 h2의 버전 호환 문제인 것 같아서 기존에 깔았던 것을 삭제하고, 강사님의 버전과 동일하게 맞췄습니다:) 기존에는 최신 버전으로 맞춰서

<dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.6.10.Final</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> </dependency>

이렇게 맞췄었는데, 서로 버전 호환이 안 되어서 해당 문제가 생겼던 것 같습니다. 감사합니다!:)

네, 올리신 것처럼 세팅하시면 안되는게

<!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> </dependency>

h2를 2.1.214로 지정하신 설정인데,

 

h2.1.4.200으로 설치하셔서 에러가 발생하였나보네요.

그래서 h2를 실행시키지 않았을 때 발생하는 에러메시지가 뜬 거 같구요.

잘 해결하셨습니다 :)

0

안녕하세요. ­오선정[경영학부]님, 공식 서포터즈 OMG입니다.

1. 강의 10분 40초부터 설명중이신데요,

@Enumerated의 디폴트 값은 ORDINAL로 ORDINAL일 경우 숫자로 값이 세팅됩니다.

@Enumerated(EnumType.String)으로 지정하신 후 애플리케이션을 실행했다면 문자로 저장되는게 맞습니다.

 

2.

해당 오류 메시지 위에 추가적인 메시지가 있을것 같은데요,

실행 및 오류 메시지 전체 내용을 복사-붙여넣기로 남겨주세요.

감사합니다.