【问题标题】:Why Hibernate can not create table?为什么 Hibernate 不能创建表?
【发布时间】:2017-03-23 07:41:59
【问题描述】:

我有以下版本的带有 Hibernate 的 Java SE 应用程序: 信息:HHH000412:休眠核心 {5.2.9.Final} 信息:HCANN000001:Hibernate Commons Annotations {5.0.1.Final}

初始化失败:entityManagerF = Persistence.createEntityManagerFactory("mgr");

导致以下异常:

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 org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:889)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at entities.HibernateUtil.initialize(HibernateUtil.java:64)
    at entities.HibernateUtil.getEntityManager(HibernateUtil.java:49)
    at com.company.RunS.<clinit>(RunS.java:30)
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'type=MyISAM' at line 104
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:536)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:513)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:115)
    at com.mysql.cj.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:1983)
    at com.mysql.cj.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:1936)
    at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:891)
    at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:795)
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)
    ... 17 more

因此无法创建表。谁能告诉我如何让 Hibernate 工作?

【问题讨论】:

  • 共享DDL,貌似语法有错误
  • MySQL Type=MyISAM Error的可能重复
  • 它有错误:在 DDL 的末尾有 ") type=MyISAM" 但据我所知必须是 ")ENGINE=MyISAM"。但我不知道如何解决这个错误,它是自动生成的脚本,我有 org.hibernate.dialect.MySQLDialect 。我在日志中有“INFO: HHH000206: hibernate.properties not found”,可能是这出戏?
  • @Jens Hibernate 自动生成 DDL 脚本,你能告诉我如何强制它使用正确的语法吗?
  • @Catherine 请使用org.hibernate.dialect.MySQL5Dialect(见中间的5)

标签: hibernate mariadb


【解决方案1】:

... syntax to use near 'type=MyISAM' ... 是问题所在。

这是旧语法。将type 更改为engine 即可解决您的问题。

如果 Hibernate 生成了错误的语法,请升级它!

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 2018-10-12
    • 1970-01-01
    • 2016-12-01
    • 2014-08-29
    • 1970-01-01
    • 2022-08-17
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多