【问题标题】:Hibernate MySQLMyISAMDialect doesn't work?休眠 MySQLMyISAMDialect 不起作用?
【发布时间】:2014-12-11 20:50:02
【问题描述】:

我使用的是休眠 4.2.1 和 MySQL 5.5。

在 persistence.xml 我有这个:

<!-- ... -->
<properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.dialect"  value="org.hibernate.dialect.MySQLMyISAMDialect" />

</properties>

但是当我运行我的项目时,我的数据库不包含任何表!

有人知道吗?! 谢谢

【问题讨论】:

    标签: mysql hibernate jpa myisam


    【解决方案1】:

    从您的配置中完全删除方言行。

    假设您提供正确的用户名/密码,Hibernate 可以根据底层数据库元数据检测要使用的方言。我从来没有遇到过 Hibernate 自动检测我的数据库版本的问题。它对 MySQL 尤其有用,因为 MySQL 可以使用不同版本的方言。

    如果你看到以下异常

    org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
    

    说明你的用户名/密码不正确,Hibernate无法连接数据库,去实际读取元数据来选择自己的方言。

    我发现使用 SQL 脚本设置数据库表更容易,然后让 Hibernate 到 validate 您的架构。不建议在生产环境中让 Hibernate 生成任何数据库结构(使用 create-update 或仅使用 update),因为您无法控制数据库的设置方式。

    TL;DR:让 Hibernate 选择自己的方言。它将为您节省数小时的麻烦。

    【讨论】:

    • 感谢您的回复,我已经从我的 persistence.xml 中删除了方言行,但休眠仍然为我生成 InnoDB 存储的数据库!!。我也应该删除这个:。谢谢
    • 不,如果 Hibernate 使用 InnoDB 方言,那么您的数据库使用的是 InnoDB 存储引擎,而不是旧的 ISAM 存储引擎。它是您数据库上的设置。但 ISAM 是比 InnoDB 更古老的技术。
    猜你喜欢
    • 2015-10-28
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2013-09-25
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多