`
jiaguwen123
  • 浏览: 413905 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate生成数据库表

阅读更多

import org.hibernate.cfg.Configuration;   
import org.hibernate.tool.hbm2ddl.SchemaExport;   
  
public class ExportDB {   
    public static void main(String[] args) {   
        Configuration configuration=new Configuration().configure();   
           
        SchemaExport schemaExport=new SchemaExport(configuration);   
        schemaExport.create(true, true);   
    }   
}

 

总结:用此方法用成数据表,对数据库迁移时相当方便!

分享到:
评论
3 楼 javaeye_hua 2011-02-09  
映射时,有中间表存在(中间表没有独立的po,双方映射多对多,使用此中间表方式)的话,此方式报错,不知楼上是否遇见:

*******
create table fld_b_altObj_dangerZoneRate (alertObjectId varchar(16) not null, dangerZoneRateId varchar(16) null, primary key (dangerZoneRateId, alertObjectId))
2011-02-09 15:21:51,062 ERROR [http-8083-2] [SchemaExport.java:274] - Unsuccessful: create table fld_b_altObj_dangerZoneRate (alertObjectId varchar(16) not null, dangerZoneRateId varchar(16) null, primary key (dangerZoneRateId, alertObjectId))
2011-02-09 15:21:51,062 ERROR [http-8083-2] [SchemaExport.java:275] - 无法在表 'fld_b_altObj_dangerZoneRate' 中可为空的列上定义 PRIMARY KEY 约束。
2 楼 jiaguwen123 2010-08-19  
hibernate中annotation方式SchemaExport无法生成表的原因(ORA-02261)主要原因分析如下:

1.ID的注解中, @Column(name = "ID", nullable = false, unique = true, insertable = true, precision = 22, scale = 0)注解中绝对不能出现 unique = true 这个属性

记得:一定要移除unique = true

2.表名可能是Oracle数据库的关键字,比如表名是user,order,这时候建议给表名加前缀,比如:t_user,t_order

3. hibernate.cfg.xml 中一定要配置如下信息(非常关键,全靠这个配置才能生产表结构):

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>

4. 记得把PoJO添加到 hibernate.cfg.xml 中

<mapping class="com.dvn.li.hiberUse.model.Customer" />
<mapping class="com.dvn.li.hiberUse.model.Order" />

5.Annotation要使用AnnotationConfiguration,XML的格式是使用Configuration的

demo如下:

SchemaExport export = new SchemaExport(new AnnotationConfiguration()
     .configure());
export.create(true, true);


备注:

第一种情况是最难查找出来的,一旦使用了unique = true,程序可以正常的执行倒出表的语句,并且后台打印了SQL语句,可是数据库就是没有,无论怎么刷新也没有;

这时候把SQL复制到数据库中执行,反而会提示:

ORA-02261: 表中已存在这样的唯一关键字或主键

崩溃吧!

移除ID设置中的unique = true就搞定啦!

------------------------------------------------------------------------------

其实在项目的开发中,使用SchemaExport产生数据库表结构基本很少,因为数据库都是在项目Coding前定义好的;

1.Hibernate的SchemaExport接口的主要作用是测试使用;

2.如果你从网上下载了一个工程,但是没有提供建表语句,OK,它就是不错的选择,自动生成表结构!

3.如果希望改变数据库,重新生成数据库表,OK,SchemaExport也可以;比如项目工程用oracle数据,但是在家里调试时候没有安装Oracle数据库,只有MySql数据库,这时候只要修改了hibernate.cfg.xml 的数据库连接地址,用户名,密码,驱动,方言,就可以再生产对应新的数据库的表结构;--------但是,代码却需要一定的改动,因为如果没有采用HQL语句,hibernate是做不到跨数据库滴,比如代码中sql使用了oracle的专有函数,在mysql中就无法运行。
1 楼 jiaguwen123 2010-08-19  
一般情况下,我们都是先建数据库表,然后使用它开发项目。

如果项目需要迁移,则先在异地建立数据库,然后跑SQL创建表结构,然后部署项目。

Hibernate自带的工具hbm2ddl却给我们提供了第二个办法,不用SQl就可以新建表结构;

前提条件:

项目使用hibernate,存在hibernate的hibernate.cfg.xml,mapping文件(hbm.xml),POJO都在;

hibernate.cfg.xml中添加如下配置:

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>

第一步:重新配置数据库参数

数据库参数主要修改这些:新的数据库url,用户名,密码;如果以前用的是oracle,现在用mySql,木有问题,同样可以帮你在新的数据库上自动生成,但是需要修改它的方言,修改成新的数据库的方言----自动生成表结构的SQL时候SQL全靠它判断数据库类型了;

<property name="dialect">
    org.hibernate.dialect.MySQLDialect
   </property>

第二步:使用SchemaExport对象生成数据库表

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ImportDatabase {
public static void main(String[] args) {
   Configuration cfg = new Configuration().configure();
   SchemaExport export = new SchemaExport(cfg);
   export.create(true, true);
}
}

执行这段代码。OK,搞定!


但是,我通过annotation的方式生成表的时候却没有成功!

SchemaExport export = new SchemaExport(new AnnotationConfiguration()
     .configure());
export.create(true, true);

不知道什么原因。

后来才发现,如果用Annotation,ID的设置不能用unique = true

具体参见:http://hi.baidu.com/huahua035/blog/item/ae9d617e53a5e20528388a81.html

哈哈。。。。

其实项目开发中一般很少会用hibernate倒出数据库,都是先设计好数据库的。这种情况最适用于生成不同数据库,比如原来是oracle数据库,现在换成mysql!

相关推荐

    hibernate根据字段生成数据库表

    ### Hibernate根据字段生成数据库表 #### 一、概述 在软件开发过程中,特别是在进行多数据库支持的应用程序开发时,我们经常需要将同一套代码部署到不同的数据库系统上。这种情况下,手动为每个数据库创建相同的表...

    hibernate反向生成数据库表

    利用hibernate的逆向工程生成数据库表

    JAVA通过实体生成数据库表

    在这个场景中,"JAVA通过实体生成数据库表"指的是使用特定的工具或框架,根据预先定义好的Java实体类,自动生成对应的数据库表结构。 首先,我们需要理解什么是实体类。在Java中,实体类通常是对应数据库中的一张表...

    hibernate自动生成数据库文件

    通过这些注解,Hibernate能理解类的结构并据此生成数据库表。 5. **Hbm2DDL Auto**:在Hibernate配置中,有一个属性`hibernate.hbm2ddl.auto`,它可以设置为不同的值,如`create`、`update`、`validate`等,控制...

    根据hibernate配置文件生成数据库.zip

    本压缩包“根据hibernate配置文件生成数据库.zip”包含了一些关键资源,帮助开发者理解如何使用Hibernate工具hbm2ddl自动生成数据库结构。以下是对这些资源的详细解释: 1. **使用Hibernate的工具hbm2ddl根据你的...

    根据hibernate反向生成数据库的java代码

    "根据Hibernate反向生成数据库的Java代码"这一主题涉及到的主要知识点包括Hibernate的逆向工程、实体类生成、数据库元数据以及Java持久化接口。 1. Hibernate逆向工程: Hibernate的逆向工程工具,也被称为...

    hibernate@注解方式配置实体类,调用javadoc接口生成数据库表及字段的注释说明

    hibernate@注解方式配置实体类时,利用javadoc接口生成数据库表及字段的注释说明,支持oracle、sqlserver、db2、mysql数据库。因用到java\lib\tools.jar,需要将该jar放入工程lib下(或者tomcat\lib下、或加入...

    hibernate映射文件生成数据库

    4. 使用工具或API生成数据库:有了映射文件,你可以使用Hibernate的`SchemaExport`工具或者编程方式执行`sessionFactory.createSchema()`方法来根据映射文件生成数据库表。这将在数据库中创建对应的表结构。 三、...

    hibernate反向生成数据库表.doc

    《使用Hibernate反向生成数据库表》 在Java后端开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库操作。利用Hibernate,开发者可以将Java类与数据库表进行映射,使得数据库操作更加面向对象。...

    Eclipse数据库hibernate反向生成数据库类

    Eclipse数据库hibernate反向生成数据库类 在本篇文章中,我们将详细介绍如何使用Eclipse中的Hibernate插件反向生成数据库实体类。首先,我们需要安装Hibernate Tools,下载地址为...

    hibernate反向生成数据库程序

    "hibernate反向生成数据库程序"是指通过Hibernate框架,从已有的数据库结构生成对应的Java实体类和映射文件,这样可以简化数据库与Java对象之间的交互。下面将详细介绍这个过程以及提供的代码片段。 首先,我们需要...

    Hibernate 映射数据库表插件

    但通常,这类插件可能会提供以下功能:自动生成Java实体类,根据数据库结构创建Hibernate的配置文件(如hibernate.cfg.xml),以及提供图形化界面来可视化数据库表结构和映射关系。此外,它可能还支持自动更新Java...

    Android与SSH框架服务器通信方式

    Android与SSH框架服务器通信方式!一篇技术文档!

    Hibernate 多数据库支持解决方案

    Hibernate是一个强大的Java持久化框架,它允许开发者将对象模型与关系数据库进行映射,从而简化了数据库操作。在处理多数据库支持时,Hibernate提供了一些策略和技巧来确保应用程序能够在不同类型的数据库之间灵活...

    Hibernate 3.2反向生成数据库文件

    在提供的"WebRoot/info"文件夹中的"Hibernate反向生成数据库表.doc"文档,应该详细介绍了以上操作流程,建议仔细阅读以掌握具体步骤。如果你在使用过程中遇到任何问题,可以参考Hibernate的官方文档或在线社区寻求...

    java生成数据库表序列号

    在Java编程中,生成数据库表序列号通常涉及到数据库序列(Sequence)的概念,这是数据库系统用于自动为表生成唯一标识符的一种机制。Oracle、PostgreSQL等数据库支持序列,而MySQL等数据库可能通过自增主键来实现...

    hibernate动态数据库进化版

    在传统的Hibernate使用中,通常会预定义一些ORM映射文件或注解来固定数据库表的映射关系,但这在应对多变的业务需求和多种数据库环境时显得不够灵活。动态数据库进化版的目的是打破这种局限,使Hibernate能够根据...

    毕业设计,课程设计,大作业-基于安卓Android房屋租赁系统app设计与实现

    系统开发环境: Windows + Myclipse(服务器端) + Eclipse(手机客户端) + mysql数据库 服务器也可以用Eclipse或者idea等工具,...hibernate生成数据库表后,只需要在admin管理员表中加个测试账号密码就可以登录后台

    毕业设计,课程设计,大作业-基于安卓Android精品课程在线学习系统app设计

    系统开发环境: Windows + Myclipse(服务器端) + Eclipse(手机客户端) + mysql数据库 服务器也可以用Eclipse或者idea等工具,...hibernate生成数据库表后,只需要在admin管理员表中加个测试账号密码就可以登录后台

    毕业设计,课程设计,大作业-基于安卓Android求职招聘系统app设计

    系统开发环境: Windows + Myclipse(服务器端) + Eclipse(手机客户端) + mysql数据库 服务器也可以用Eclipse或者idea等工具,...hibernate生成数据库表后,只需要在admin管理员表中加个测试账号密码就可以登录后台

Global site tag (gtag.js) - Google Analytics