我遇到的问题是,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环境。
答案 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)
似乎很明显存在命名或套管问题。
我将以下内容改为小写,它解决了问题:
我这样做是因为我刚刚开始一个项目,想要使用Hibernate但不熟悉它,并且不关心这些与数据相关的项目是否有所改变。
我也采用了这种方法,因为它看似简单而且不起眼。如果失败了,我会尝试不同的技术和解决方案。
我没有必要更改或添加任何不熟悉的代码或注释。我所要做的就是小写上面提到的项目。
它是一种基本的元数据解决方案,而不是一种不熟悉的代码解决方案。
它不优雅,但它消除了与案件相关的问题是否会导致您的情况的任何含糊不清。