web-dev-qa-db-ja.com

GenerationTargetがコマンドを受け入れる例外を検出しました:JDBCステートメントを介したDDLの実行エラー

私は冬眠世界の初心者であり、

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

hibernate 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.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@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.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@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.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@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)
10
MHJ

_org.hibernate.dialect.MySQL5Dialect_ OR _org.hibernate.dialect.MySQLMyISAMDialect_ OR _org.hibernate.dialect.MySQLInnoDBDialect_)などの別の方言を試してみて、どちらが適切かを確認してください。

全体として、現在の方言は、_type=MyISAM_を生成していますが、テーブルクエリの作成では_ENGINE=MyISAM_である必要があります。

mysqlエラー 'TYPE = MyISAM'

これも読むべきです なぜデータソースのSQLダイアレクトを設定する必要があるのですか?

ログには、このクエリが実行されようとしたcreate table MyTable (id integer not null, name varchar(255), primary key (id)) type=MyISAMであるため、mysqlコマンドプロンプトでそのクエリを直接実行して、MySQLバージョンで機能するかどうかを確認する必要があります。

また、問題のMySQLバージョンも指定してください。

それが役に立てば幸い !!

21
Sabir Khan

更新されたバージョンのMySQLを使用していますが、olddialectを使用しています

どちらかを使用して、

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

OR

<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>

の中に hibernate.cfg.xmlファイル。

これにより、dialectの問題を回避できます。

2
Dulith De Costa

Hibernate構成XMLファイルの変更。

  <!-- SQL dialect -->      
  <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
1
Ganesh Giri

このエラーに直面している理由は、以下の理由のいずれかである可能性があります。

  • DBスクリプトの列名とモデル/エンティティクラスは異なります。
  • プロパティ値について言及しているときに、構成ファイルにスペルミスがあります。
  • MySQLバージョンは、あなたが言及している方言と一致していません。

DATABASE SCRIPTの列名を変更したが、Model/Entityクラスで変更するのを忘れたため、このエラーに直面していました。そのため、4時間髪を引っ張った後、私はこれを行うだけで、アプリケーションが実行を開始しました。

1
Ashwani Sharma

プロパティ値の間違いを確認してください。

Dialec't'を単に忘れてしまうと、いつか起こります-これはDialectでなければならず、単にスペルミスまたは値の種類間違いはあなたの設定の中にあります。

0
ArifMustafa