使用Hibernate自动生成表不能正确创建表的问题
2017-08-01 18:45
435 查看
使用Hibernate自动生成表不能正确创建表的问题
今天做项目的时候使用的是 实体--> 数据库表 的映射采用hibernate自动生成表结构,控制台打印的见表语句都是正确的额。但是在数据库中有部分表找不到。最后发现是因为数据库表的字段和数据库中的关键字冲突,所以在映射文件配置的时候对某些特殊的字段加个column字段来进行区分。问题得到解决。
<property name="content" column="contents"/>
<property name="sendTime" type="timestamp"/>
<property name="read" column="isread"/>
还有,下面看到的一个问题也需要注意。开始以为是这个问题所致,结果是因为字段名字的问题:
像下面这种问题如果使用的是SQL Server 数据库,可以这样配置解决:
<property name="default_catalog">dbo</property>
最近在项目中使用hibernate的动态生成表,即将hbm2ddl.auto配置成update时,发现hibernate并没有按照默认的生成规则生成相应的数据表信息。但奇怪的是,只是部分表没有生成,而其它的表即生成成功了。重新启动项目,发现问题依旧。奇怪的是,虽然有些表没有生成,但它相关联的关联表即生成了,而且在生成时,会报一个找不到相关的引用表的错误。报的错误如下:
1
2 =2011-05-06 09:45:56 [org.hibernate.tool.hbm2ddl.SchemaUpdate]-[ERROR] Unsuccessful: alter table r_role_x_menu add constraint FK474DC862E1A553E2 foreign key (menu_id) references p_menu
=2011-05-06 09:45:56 [org.hibernate.tool.hbm2ddl.SchemaUpdate]-[ERROR] ORA-00942: 表或视图不存在
找了半天,最后发现一个问题,即这里需要引用的表p_menu在另一个用户空间里已经存在了,而hibernate在创建表时,在另一个用户空间中找到了这个表,故不再在当前的用户空间中创建这个表了。而在创建关联表时,由于关联的是本用户空间的表,故有此错误。
hibernate使用了jdbc默认的databasemeta来寻找相应表数据信息,当使用默认的配置时,由于某种原因(并不是每次都能发生,取决于数据库本身以及相应的驱动)。当使用当前用户连接到数据库时,使用databasemeta寻找数据库表信息时,会查询出其它用户的数据表信息(即使当前用户没有相应的权限)。
解决此问题的方法很简单,只需要在hibernate.cfg.xml中配置一句:
<property name="default_schema">当前连接用户</property>
这样,使用databasemeta时,就会强制性地在当前用户空间中寻找数据库信息了,这样就能正确的创建出表结构了。
转载自:点击打开链接
相关文章推荐
- 使用Hibernate自动生成表不能正确创建表的问题
- 解决在oracle数据库中使用hibernate生成表不能正确创建表的问题
- 解决在Oracle数据库中使用hibernate生成表不能正确创建表的问题
- 解决在oracle数据库中使用hibernate生成表不能正确创建表的问题
- 解决在Oracle数据库中使用hibernate生成表不能正确创建表的有关问题
- 解决在Oracle数据库中使用hibernate生成表不能正确创建表的问题
- hibernate生成表不能正确创建表的问题
- ButterKnife的使用以及不能自动生成代码问题的解决
- hibernate中关于数据库方言导致不能自动生成数据库表的问题
- SSH整合中在Hibernate不能自动创建表的问题
- 使用hibernate的id自动生成策略问题
- 关于Hibernate不能自动生成数据库表-POJO和映射文件正确但是访问对应表出错-的原因
- ButterKnife的使用以及不能自动生成代码问题的解决
- .net 中使用ActiveX控件的自动创建的包装器的问题(自动生成的Interop.Ax*Lib.dll)
- 沫沫金::hibernate实体增加属性后不能自动生成表的问题研究
- 使用hibernate的id自动生成策略问题
- Hibernate中Javabean不能自动生成MySQL表结构问题
- 解决Hibernate不能自动创建数据库表的问题
- spring和hibernate整合时不能自动创建表的问题
- 使用SSH Hibernate自动创建表的问题:Could not parse mapping document from input stream