2017-04-14 33 views
2

執行DDL我在休眠世界,面向新手的錯誤,GenerationTarget遇到例外接受命令:通過JDBC聲明

WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement 
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement 

例外,當我運行在休眠我的單機PROGRAME 5.2.9版本。但在hibernate 4版本中,我所有的代碼運行良好。我尋找了很多問題,解決了問題,但是卻沒有解決我的問題。

配置文件

hibernate.cfg.xml 

    <hibernate-configuration> 
     <session-factory> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password">admin</property> 
     <property name="hibernate.connection.pool_size">20</property> 
     <property name="hibernate.show_sql">true</property> 
     <property name="hibernate.hbm2ddl.auto">create</property> 
     <mapping class="com.test.hibernate14417.MyTable"></mapping> 
     </session-factory> 
    </hibernate-configuration> 

的pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>Hibernate14417</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <repositories> 
    </repositories> 
    <dependencies> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.2.9.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.1-api</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.3.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>net.sourceforge.jtds</groupId> 
      <artifactId>jtds</artifactId> 
      <version>1.3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>3.1.11</version> 
     </dependency> 
    </dependencies> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 
</project> 

實用程序文件

package com.test.hibernate14417; 

import org.hibernate.SessionFactory; 
import org.hibernate.boot.Metadata; 
import org.hibernate.boot.MetadataSources; 
import org.hibernate.boot.registry.StandardServiceRegistry; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.service.ServiceRegistry; 


public class ExecuteUtil { 
    private static final SessionFactory SESSION_FACTORY=buildSessionFactory(); 

    private static SessionFactory buildSessionFactory() { 
     try { 
      ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() 
        .configure("hibernate.cfg.xml").build(); 

      Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata(); 

      return metadata.getSessionFactoryBuilder().build(); 

     } catch (Throwable ex) { 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 

    } 

    public static SessionFactory getSESSION_FACTORY() { 
     return SESSION_FACTORY; 
    } 

    public static void shutdown(){ 
     getSESSION_FACTORY().close(); 
    } 

} 

實體文件

package com.test.hibernate14417; 

import java.io.Serializable; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 




@Entity 
public class MyTable implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    private String name; 

    public int getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 



} 

主要方法

package com.test.hibernate14417; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 


public class Main { 
    public static void main(String[] args) { 

     MyTable mt=new MyTable(); 
     mt.setName("Man"); 

     SessionFactory sessionFactory=ExecuteUtil.getSESSION_FACTORY(); 

     Session session=sessionFactory.getCurrentSession(); 


     try { 
      session.getTransaction().begin(); 

      session.save(mt); 

      session.getTransaction().commit(); 

      session.close(); 
      sessionFactory.close(); 

     } catch (Exception e) { 
      System.out.println(e.getStackTrace()); 
      session.getTransaction().rollback(); 
     } 


    } 

控制檯

cd D:\Netbeans\Hibernate14417; "JAVA_HOME=C:\\Program Files\\Java\\jdk1.8.0_121" cmd /c "\"\"C:\\Program Files\\NetBeans 8.2\\java\\maven\\bin\\mvn.bat\" -Dexec.args=\"-classpath %classpath com.test.hibernate14417.Main\" -Dexec.executable=\"C:\\Program Files\\Java\\jdk1.8.0_121\\bin\\java.exe\" -Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans 8.2\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec\"" 
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts. 
Scanning for projects... 

------------------------------------------------------------------------ 
Building Hibernate14417 1.0-SNAPSHOT 
------------------------------------------------------------------------ 

--- exec-maven-plugin:1.2.1:exec (default-cli) @ Hibernate14417 --- 
Apr 14, 2017 10:41:51 AM org.hibernate.Version logVersion 
INFO: HHH000412: Hibernate Core {5.2.9.Final} 
Apr 14, 2017 10:41:51 AM org.hibernate.cfg.Environment <clinit> 
INFO: HHH000206: hibernate.properties not found 
Apr 14, 2017 10:41:53 AM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity 
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-configuration. Use namespace http://www.hibernate.org/dtd/hibernate-configuration instead. Support for obsolete DTD/XSD namespaces may be removed at any time. 
Apr 14, 2017 10:41:54 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> 
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 
Apr 14, 2017 10:41:54 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) 
Apr 14, 2017 10:41:54 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
Apr 14, 2017 10:41:54 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH10001001: Connection properties: {user=root, password=****} 
Apr 14, 2017 10:41:54 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH10001003: Autocommit mode: false 
Apr 14, 2017 10:41:54 AM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init> 
INFO: HHH000115: Hibernate connection pool size: 20 (min=1) 
Apr 14, 2017 10:41:55 AM org.hibernate.dialect.Dialect <init> 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
Apr 14, 2017 10:41:55 AM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl useContextualLobCreation 
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 
Hibernate: drop table if exists hibernate_sequence 
Apr 14, 2017 10:41:58 AM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection 
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.[email protected]24111ef1] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. 
Hibernate: drop table if exists MyTable 
Hibernate: create table hibernate_sequence (next_val bigint) type=MyISAM 
Apr 14, 2017 10:41:58 AM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection 
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.[email protected]531f4093] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. 
Apr 14, 2017 10:41:58 AM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException 
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement 
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:155) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445) 
    at com.test.hibernate14417.ExecuteUtil.buildSessionFactory(ExecuteUtil.java:29) 
    at com.test.hibernate14417.ExecuteUtil.<clinit>(ExecuteUtil.java:20) 
    at com.test.hibernate14417.Main.main(Main.java:21) 
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=MyISAM' at line 1 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2926) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2972) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2902) 
    at com.mysql.jdbc.Statement.execute(Statement.java:529) 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) 
    ... 13 more 

Hibernate: insert into hibernate_sequence values (1) 
Apr 14, 2017 10:41:58 AM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException 
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement 
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:155) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445) 
    at com.test.hibernate14417.ExecuteUtil.buildSessionFactory(ExecuteUtil.java:29) 
    at com.test.hibernate14417.ExecuteUtil.<clinit>(ExecuteUtil.java:20) 
    at com.test.hibernate14417.Main.main(Main.java:21) 
Caused by: java.sql.SQLException: Table 'test.hibernate_sequence' doesn't exist 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2926) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2972) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2902) 
    at com.mysql.jdbc.Statement.execute(Statement.java:529) 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) 
    ... 13 more 

Hibernate: create table MyTable (id integer not null, name varchar(255), primary key (id)) type=MyISAM 
Apr 14, 2017 10:41:58 AM org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException 
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement 
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:440) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135) 
    at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:155) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:445) 
    at com.test.hibernate14417.ExecuteUtil.buildSessionFactory(ExecuteUtil.java:29) 
    at com.test.hibernate14417.ExecuteUtil.<clinit>(ExecuteUtil.java:20) 
    at com.test.hibernate14417.Main.main(Main.java:21) 
Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=MyISAM' at line 1 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2926) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2972) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2902) 
    at com.mysql.jdbc.Statement.execute(Statement.java:529) 
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) 
    ... 13 more 

Apr 14, 2017 10:41:58 AM org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources 
INFO: HHH000476: Executing import script 'org.hiber[email protected]7776ab' 
Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured! 
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:454) 
    at com.test.hibernate14417.Main.main(Main.java:23) 

回答

1

你應該嘗試不同的方言一樣org.hibernate.dialect.MySQL5Dialectorg.hibernate.dialect.MySQLMyISAMDialectorg.hibernate.dialect.MySQLInnoDBDialect,看看哪一個對你的作品。

總而言之,您當前的方言正在生成,type=MyISAM應該是,ENGINE=MyISAM在創建表格查詢。

mysql error 'TYPE=MyISAM'

你應該閱讀這也Why do I need to configure the SQL dialect of a data source?

你的日誌說,這個查詢被試圖執行,create table MyTable (id integer not null, name varchar(255), primary key (id)) type=MyISAM所以你應該嘗試直接執行該查詢在MySQL命令提示符下,看看是否能適用於您的MySQL版本。

另外,有問題也指定你的MySQL版本。

希望它有幫助!

0

您可以從配置文件中評論HBM2DDL配置

0

更改hibernate配置XML文件。

<!-- SQL dialect -->  
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
0

檢查你的財產價值錯誤。

它發生的某個時候,當你只是簡單地忘記了「T」Dialec,它必須是方言,只需拼寫錯誤或值類的錯誤有你的配置裏面。