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

时间:2011-06-02 18:28:47

标签: 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> 

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

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

例如

@Entity
@Table(name="user")
public class User implements Serializable {
    ...
}

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

Jut非常清楚,问题不是hibernate,而是mysql如何处理表名。

答案 2 :(得分:0)

似乎很明显存在命名或套管问题。

我将以下内容改为小写,它解决了问题:

  1. 表格中的列名称
  2. 表名
  3. 我也更改了数据库名称,因为我使用了霰弹枪方法。
  4. .java和* .hbm.xml文件中对上述内容的所有引用
  5. 我这样做是因为我刚刚开始一个项目,想要使用Hibernate但不熟悉它,并且不关心这些与数据相关的项目是否有所改变。

    我也采用了这种方法,因为它看似简单而且不起眼。如果失败了,我会尝试不同的技术和解决方案。

    我没有必要更改或添加任何不熟悉的代码或注释。我所要做的就是小写上面提到的项目。

    它是一种基本的元数据解决方案,而不是一种不熟悉的代码解决方案。

    它不优雅,但它消除了与案件相关的问题是否会导致您的情况的任何含糊不清。