我目前正在尝试为表设置存储引擎,因为根据具体情况应使用 MyISAM 和 InnoDB。不幸的是我没有找到在 Hibernate 中设置它的方法,并且我不想手动创建每个表。我更喜欢的方法是在 Java-POJO 中对其进行注释,但我找不到这样做的方法。
我找到了Hibernate: what's the difference between MySQLDialect and MySQLInnoDBDialect? ,它告诉我将方言设置为 org.hibernate.dialect.MySQLMyISAMDialect
会有帮助(它是针对 InnoDB-Dialect 说的,但似乎可以用它来选择默认方言),但这种方法有两个缺点:第一,为所有表选择方言,第二,它创建一个查询喜欢 CREATE TABLE xy(..) type=MyISAM
但查询是正确的 engine=MyISAM
。
还有Hibernate mysql innodb说有默认值,并且我可以在创建表时覆盖它们,但不知道如何覆盖它们 - 有人知道如何做到这一点吗?
最佳答案
而不是 org.hibernate.dialect.MySQLMyISAMDialect
或org.hibernate.dialect.MySQLInnoDBDialect
,你应该使用org.hibernate.dialect.MySQL5MyISAMDialect
或org.hibernate.dialect.MySQL5InnoDBDialect
。
这样,它就会使用engine=MyISAM 或engine=InnoDB 创建表。
但是这个配置是全局的,如果你确实有理由为单个表配置它,你可以尝试:
- Hibernate 导入 SQL (hibernate.hbm2ddl.import_files)。添加包含更改表的 SQL 文件的路径。
关于java - 设置Hibernate中表的存储引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28628949/