Hibernate方案命名在OS之间有所不同

Eri*_*rik 6 mysql hibernate jpa java-ee

我面临的问题是,hibernate生成的模式名称(例如表名称)在Windows和Linux之间有所不同.在Windows上,所有表名都是小例子,例如account,在Linux下创建的表名是骆驼案例,例如Account.

在两个系统上,我使用相同版本的MySQL 5和以下的hibernate配置:

<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
<prop key="hibernate.bytecode.provider">cglib</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop> 
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?基本上我可以忍受这个奇怪的问题,但有时它很烦人我不能只是将我的表从我的Windows IDE导出到我的linux环境.

gou*_*uki 8

您可能希望将属性设置hibernate.ejb.naming_strategyorg.hibernate.cfg.ImprovedNamingStrategy或实现自己的命名策略类.


Aug*_*sto 5

不幸的是,这是mysql在区分大小写的文件系统上工作的方式(我在Mac上遇到了与"insenstive"文件系统相同的问题).要解决此问题,您需要自己提供表的名称.

例如

@Entity
@Table(name="user")
public class User implements Serializable {
    ...
}
Run Code Online (Sandbox Code Playgroud)

表名应全部为小写!通过这种方式,您可以确保MySQL将正确命名该表.

Jut非常清楚,问题不是休眠,而是mysql如何处理表名.