2017-02-16 2 views
1

HibernateH2을 사용하고 싶습니다. 스키마를 자동으로 생성하고 싶습니다. 온라인으로 많은 예제가 있고 구성이 괜찮은 것처럼 보이지만 작성되지 않았습니다. 이전에는 MySQL과 함께 사용했는데 아무런 문제가 없었습니다. H2 어디서나 추가 매개 변수가 포함됩니까? 다음과 같이Hibernate - H2 데이터베이스가 생성되지 않았습니다.

내 퍼시스턴스 유닛이 persistence.xml에 정의되어 show_sql 이후

<persistence-unit name="some.jpa.name" 
    transaction-type="RESOURCE_LOCAL"> 

    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <!-- tried with and without class property 
    <class>some.package.KeywordTask</class>  
    --> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:h2:./test" /> 
     <property name="javax.persistence.jdbc.user" value="" /> 
     <property name="javax.persistence.jdbc.password" value="" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="create" /> 
     <property name="show_sql" value="true" /> 
    </properties> 

</persistence-unit> 

이 true로 설정되어, 스키마가 생성되지 않습니다, 즉를 나는 문을 만들어 볼 것으로 예상하지만 아무 일도 발생하지 않습니다.

EntityManager em = emf.createEntityManager(); 
em.getTransaction().begin(); 
KeywordTask task = new KeywordTask(); 
task.setKeyword(keywordTask.getKey()); 
task.setLimit(keywordTask.getValue()); 
em.persist(task); 
em.getTransaction().commit(); 
em.close(); 

이 원인 예외가 발생합니다 : 내 코드에서 어떤 장소에서

public static EntityManagerFactory emf = Persistence.createEntityManagerFactory("some.jpa.name"); 

, 내가 엔티티를 유지하는 것을 시도하고있다 :

나는 나의 EntityManagerFactory final static 변수로 유지

org.h2.jdbc.JdbcSQLException: Table "KEYWORDTASK" not found; 

이는 t 그는 스키마가 만들어지지 않습니다.

스키마를 어떻게 만들 수 있습니까?

+0

도움이 필요하십니까? [this] (http://stackoverflow.com/a/25156520/574975) – jaivalis

+0

@jaivalis 제 경우는 아주 간단합니다. 도움이 될지 모르지만 더 나은 방법이 있어야합니다. – ram

답변

1

이 문제의 이유는 매우 관련이 없었습니다! 나는 다른 사람들이 그것을 직면 할 수도 있고, 그런 어리석은 짓을하기 위해 반나절을 보낼 수도 있기 때문에 여기에 적어두고있다.

먼저 H2에서 Derby으로 변경하여 확인했습니다. 이런 식으로 persistence.xml 구성에 문제가 없다고 확신했습니다.

로그를 검색 한 후 KeywordTask 엔티티의 속성 중 하나가 예약되었으므로 최대 절전 모드에서 테이블을 만들 수 없음을 알았습니다. 예약어입니다. (인스턴스를 유지하고 설정자의 이름을 관찰하는 곳을 기억하십시오 : setLimit.) 속성의 이름을 변경 한 후에 작동했습니다.

관련 문제