微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-org.hibernate.tool.schema.spi.CommandAcceptanceException:通过JDBC语句执行DDL错误

我真的需要帮助,我在关于stackoverflow的所有问题中进行了搜索,但没有任何效果.我以前从未使用过休眠模式,也不知道自己在做什么错.我生成了表格,但是插入时出现了问题.

我收到此错误

20-May-2017 10:53:41.085 WARN [http-nio-8080-exec-1] org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl.handleException 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.AbstractSchemaMigrator.applysqlString(AbstractSchemaMigrator.java:525)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applysqlStrings(AbstractSchemaMigrator.java:470)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys(AbstractSchemaMigrator.java:429)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:245)
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:110)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
    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 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
    at gameplatform.servlet.IndexPage.init(IndexPage.java:46)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:779)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
    at org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.sqlException: Cannot add foreign key constraint
    at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:964)
    at com.MysqL.jdbc.MysqLIO.checkerrorPacket(MysqLIO.java:3973)
    at com.MysqL.jdbc.MysqLIO.checkerrorPacket(MysqLIO.java:3909)
    at com.MysqL.jdbc.MysqLIO.sendCommand(MysqLIO.java:2527)
    at com.MysqL.jdbc.MysqLIO.sqlQueryDirect(MysqLIO.java:2680)
    at com.MysqL.jdbc.ConnectionImpl.execsql(ConnectionImpl.java:2497)
    at com.MysqL.jdbc.ConnectionImpl.execsql(ConnectionImpl.java:2455)
    at com.MysqL.jdbc.StatementImpl.executeInternal(StatementImpl.java:839)
    at com.MysqL.jdbc.StatementImpl.execute(StatementImpl.java:739)
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
    ... 32 more

这是我的配置文件

<?xml version="1.0" encoding="UTF-8"?>

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.MysqL.jdbc.Driver</property>
        <property name="connection.url">jdbc:MysqL://localhost:8889/gameplatform</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.pool_size">100</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MysqL55Dialect</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>

        <mapping class="db.table.template.Permesso"/>
        <mapping class="db.table.template.PermessoTemplate"/>
        <mapping class="db.table.template.PermessoTemplateId"/>
        <mapping class="db.table.template.Template"/>
        <mapping class="db.table.template.Gruppo"/>
        <mapping class="db.table.template.Utente"/>
        <mapping class="db.table.template.Livello"/>
        <mapping class="db.table.template.Gioco"/>
        <mapping class="db.table.template.Giocare"/>
        <mapping class="db.table.template.GiocareId"/>
        <mapping class="db.table.template.Trofeo"/>
    </session-factory>
</hibernate-configuration>

这是我的测试页:

package gameplatform.servlet
public class TestPage extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestPage() {
        super();
        // Todo Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
        // Todo Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getcontextpath());

    Configuration conf = new Configuration().configure();
    Session session = conf.buildSessionFactory().getCurrentSession();
    session.beginTransaction();

    Permesso permesso = new Permesso();
    permesso.setNome("Index");
    permesso.setIndirizzo("gameplatform.op");

    Template template = new Template("slider.jsp");
    session.saveOrUpdate(template);

    PermessoTemplate permessoTemplate = new PermessoTemplate();
    permessoTemplate.setPermesso(permesso);
    permessoTemplate.setTemplate(template);
    permessoTemplate.setPriority(3);

    permesso.getPermessoTemplate().add(permessoTemplate);

    session.saveOrUpdate(permesso);

    Query query = session.createquery("from Template template join template.permessoTemplate joinPage where joinPage.pk.permesso = 'Index' order by joinPage.priority");
    List<Template> temp = query.list();

    Iterator it = temp.iterator();
    while (it.hasNext()) { 
        Object[] obj = (Object[]) it.next();
        Template test = (Template) obj[0];
        response.getWriter().append(" " + test.getIndirizzo());          
    }

    Gruppo test = new Gruppo("Admin");
    session.saveOrUpdate(test);

    Utente user = new Utente("Romolo", "De Roma", 20, "Er Zezzo", "Prova", "test@test.it", 3000, 3);
    user.setGruppo(test);
    test.getUtente().add(user);
    test.getPermesso().add(permesso);

    session.saveOrUpdate(user);

    /*Recensione recensione = new Recensione();
    recensione.setDescrizione("Gioco Bello");
    recensione.setVoto(4);
    recensione.setUtente(user);

    session.saveOrUpdate(recensione);*/

    Query control = session.createquery("from Livello");
    List<Livello> controlList = control.list();

    boolean bool = false;
    Iterator iter = controlList.iterator();
    while (iter.hasNext()) { 
        //Object[] obj = (Object[]) 
        Livello lv = (Livello) iter.next();

        if (lv.getLivello()==3 && lv.getUtente().getUsername().equals(user.getUsername())){
            bool=true;
        }
    }
    if (!bool){
        Livello livello = new Livello();
        livello.setLivello(3);
        livello.setDate(new GregorianCalendar(2017,5,20));
        livello.setUtente(user);

        session.saveOrUpdate(livello);
    }

    Gioco gioco = new Gioco();
    gioco.setNome("Zezzo");
    gioco.setDescrizione("Bel Gioco Di Merda");
    gioco.setSpecifiche("2Gb di Rom");

    Giocare giocare = new Giocare();
    giocare.setExp(3000);
    giocare.setMinuti(new Time(2000));
    giocare.setNumAccessi(30);
    giocare.setRecensione("Bello ma Brutto");
    giocare.setVoto(5);
    giocare.setUtente(user);
    giocare.setGioco(gioco);

    gioco.getGiocare().add(giocare);

    session.saveOrUpdate(gioco);

    Trofeo trofeo = new Trofeo();
    trofeo.setNome("Test");
    trofeo.setIcona("icona.jpg");
    trofeo.setobiettivo(5);
    trofeo.setGioco(gioco);
    user.getTrofeo().add(trofeo);

    session.saveOrUpdate(trofeo);

    session.getTransaction().commit();

}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
    // Todo Auto-generated method stub
    doGet(request, response);
}}

这是我的IndexPage:

package gameplatform.servlet;

    public class IndexPage extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private String pageName;
    private String[] template;

/**
 * @see HttpServlet#HttpServlet()
 */
public IndexPage() {
    super();
    // Todo Auto-generated constructor stub
}

public void init(ServletConfig config) throws servletexception {

    // Todo Auto-generated method stub
    super.init(config);
    this.pageName = getinitParameter("pageIndex");

    Configuration conf = new Configuration().configure();
    Session session = conf.buildSessionFactory().getCurrentSession();
    session.beginTransaction();

    String query = "from Template template join template.permessoTemplate joinPage where joinPage.pk.permesso = ? order by joinPage.priority";
    List execute = session.createquery(query).setString(0, pageName).list();

    session.getTransaction().commit();

    Iterator it = execute.iterator();
    int i = 0;
    this.template = new String[execute.size()];
    while (it.hasNext()) { 
        Object[] obj = (Object[]) it.next();
        Template temp = (Template) obj[0];  ;
        this.template[i] = temp.getIndirizzo();
        i++;
    }

}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
    // Todo Auto-generated method stub
    process(request, response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {
    // Todo Auto-generated method stub
    process(request, response);
}

private void process(HttpServletRequest request, HttpServletResponse response) throws servletexception, IOException {

    request.setAttribute("template", this.template);

    Requestdispatcher view = request.getRequestdispatcher("JSP/index.jsp");
    view.forward(request, response);
}}

这是我的sql日志:

    2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Fetch of persistent statistics requested for table "gameplatform"."giocare" but the required system tables MysqL.innodb_table_stats and MysqL.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Fetch of persistent statistics requested for table "gameplatform"."gioco" but the required system tables MysqL.innodb_table_stats and MysqL.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Fetch of persistent statistics requested for table "gameplatform"."gruppo" but the required 
system tables MysqL.innodb_table_stats and MysqL.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Fetch of persistent statistics requested for table "gameplatform"."permessogruppo" but the required system tables MysqL.innodb_table_stats and MysqL.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Fetch of persistent statistics requested for table "gameplatform"."trofeo" but the required system tables MysqL.innodb_table_stats and MysqL.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Fetch of persistent statistics requested for table "gameplatform"."utente" but the required system tables MysqL.innodb_table_stats and MysqL.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found.
2017-05-20 10:53:45 70000ed64000 InnoDB: Error: Fetch of persistent statistics requested for table "gameplatform"."utentetrofeo" but the required system tables MysqL.innodb_table_stats and MysqL.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.
2017-05-20 11:54:17 70000ecdc000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found.
2017-05-20 11:54:46 70000ec54000 InnoDB: Error: Table "MysqL"."innodb_table_stats" not found. 

解决方法:

问题是您的方言引擎更改为MysqL方言,请在src / main / resources文件夹下的application.properties中添加以下几行,尤其是如果使用的是Spring Boot.

    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MysqL5InnoDBDialect

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐