2010-12-20 7 views
8

구성에서 hibernate.cfg.xml, i를 추가하십시오. <property name="hibernate.hbm2ddl.auto">create</property> 최대 절전 모드 응용 프로그램을 실행할 때 자동으로 테이블을 만듭니다. 그러나, 내가 드롭 테이블 SQL을 실행하여 수동으로 데이터베이스에서 테이블을 제거합니다. 그런 다음 최대 절전 모드 응용 프로그램을 다시 실행하십시오. MySQL을 다시 시작 테이블 'test.person'는 문제를 해결하기 위해최대 절전 테이블이 존재하지 않습니다.

유일한 방법은 존재하지 않는됩니다 : com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : 예외는

에 의한 표시 데이터 베이스. 아무도 나를 위해이 문제를 설명 할 수 있습니까?

<hibernate-configuration> 
<session-factory> 
    <property name="hibernate.connection.driver_class"> 
     com.mysql.jdbc.Driver 
    </property> 
    <property name="hibernate.connection.url"> 
     jdbc:mysql://localhost/test 
    </property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">root</property> 
    <property name="dialect"> 
     org.hibernate.dialect.MySQLDialect 
    </property> 


    <!-- Drop and re-create the database schema on startup --> 
    <property name="hibernate.hbm2ddl.auto">create</property> 

    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 

    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 

    <!-- Mapping files --> 
    <mapping resource="com/mapping/Event.hbm.xml" /> 
    <mapping resource="com/mapping/Person.hbm.xml"/> 
</session-factory> 

들으

+0

어떻게 테이블을 삭제합니까? 응용 프로그램 또는 명령 줄에서? 방과후에 신청을 중단 하시겠습니까? 귀하의 회신에는 –

+0

Thx입니다. 응용 프로그램이 아닌 명령 줄을 실행하여 테이블을 삭제합니다. 그건 그렇고, 난 그냥 응용 프로그램에 의해 테이블을 만든 후 응용 프로그램에서 다른 작업을 수행 할 때 찾으십시오. 예외도 throw됩니다. 어떤 단서? – EeE

답변

11

create을 사용하여 삭제 한 테이블을 다시 추가하기 위해 내부 스키마를 업데이트 할 것이라고 생각하지 않습니다. 시도 :

<property name="hibernate.hbm2ddl.auto">update</property> 

이 존재하지 않는 경우 스키마를 생성하고 사용자가 정의한 매핑에 맞게 기존의 수정을 시도한다.

또한 가능한 값은 모두 this question입니다.

+0

예 업데이트로 변경하십시오. 하지만 여전히 문제가 있습니다.나는 테이블을 다시 추가하고 싶지만 "Table 'test.person'은 존재하지 않는다."; 테이블이 자동으로 추가되는 것으로 가정합니다. 그런 다음 SQL 서버를 다시 시작해야합니다. 그럼 내가 테이블을 추가 할 수 있습니다. 나는 트랜잭션 후 commit() 및 close()를 실행한다고 생각한다. 하지만 첫 번째 작업이 테이블을 만든 후, 그것은 계속 "테이블 'test.person'존재하지 않는 예외 던지고있다. – EeE

+0

테이블 놓기를 중지 하시겠습니까? 데이터를 삭제하려면 대신 DELETE FROM을 사용하십시오. – OrangeDog

+2

테이블의 모든 행을 제거하려는 경우 TRUNCATE TABLE test.person을 사용하십시오. – Jeshurun

5

"속성"과 "이름"사이에 공백이 내있는 hibernate.cfg.xml입니까?

<propertyname="hibernate.hbm2ddl.auto">create</property> 

그렇지 않으면 아마도 문제 일 것입니다. 또한 "MySQL 데이터베이스를 재부팅 할 때"문제가 해결된다는 것은 무엇을 의미합니까? MySQL 서버를 다시 시작해야한다는 뜻입니까, 아니면 테이블을 수동으로 다시 만들어야한다는 뜻입니까? 또한 위의 XML 발췌에서 실제로 "속성"과 "이름"사이에 공백이 있으면 하이버 네이트 로그를 제외하고, 특히 식별 한 모든 속성을 나열하는 부분을 제공하십시오.

+0

그건 그렇고, 내가 말하고있는 로그 엔트리는 다음과 같다 : 01 : 30 : 08,032 INFO 환경 : 540 - 리소스에서 hibernate.properties : {url = jdbc : hsqldb : hsqldb/hibernate.connection .driver_class = org.hsqldb.jdbcDriver, hibernate.cache.provider_class = org.hibernate.cache.HashtableCacheProvider, schema =, hibernate.cache.use_query_cache = true, hibernate.dialect = org.hibernate.dialect.HSQLDialect, username = sa, hibernate.jdbc.use_streams_for_binary = true ... – jpkrohling

+0

필자의 타이핑을 유감스럽게 생각합니다. 예외가 발생하면 MySQL 서버를 다시 시작합니다. 그러나, 난 후에 응용 프로그램에 의해 테이블을 만듭니다. 난 읽기, 업데이트 작업과 같은 추가 작업을 실행하고 싶습니다. "테이블 'test.person'존재하지 않습니다."예외 throw – EeE

+0

속성 이름에서 "최대 절전 모드"접두사를 제거하려고 할 수 있습니까? IIRC, cfg.xml 파일에는 유효하지 않으며 .properties 파일에만 필요합니다. 또한, 제발 – jpkrohling

2

동일한 문제가있었습니다. String 필드에 auto_increment (MySQL Dialect를 사용)를 사용하고 있음을 알았습니다. 문제를 해결 한 int로 변경했습니다.

+0

오늘 같은 문제가 발생했습니다. 문제가 있습니다. SQLException은 테이블이 존재하지 않는다는 것을 보여 주며 테이블을 생성 할 수없는 이유 (Hibernate configuration, columns types ...)를 알려주지 않는다. – Yassir

관련 문제