• Hibernate反向工程使用心得


    MyEclipse中的hibernate反向工程可以根据数据表自动为我们生成实体类,提高工作效率。

    但是,hibernate中单向一对多,多对一,双向多对一关联底层的数据库结构是一样,

    双向一对一,单向一对一关联的底层数据库也差不多。

    所以在进行反向生成实体类时候需要在生成过程中进行一些设置来生成我们需要的关联关系。

    首先必须在myeclipse中建立数据库连接和配置好hibernate环境,

    详细可参考:http://blog.csdn.net/fycheung/article/details/7672854

    然后就可以开始进行反向生成,

    这里以man和phone为例子进行单向man关联多个phone,单向多个phone关联一个man,多个phone和一个man互相关联的反向实体生成。

    数据库表的结构:

    反向生成步骤:

    在DB Browser中打开数据库连接选中要反向生成的表,单击右键,选择Hibernate Reverse Engineering。

    注意:如果要生成单向的关联,只能逐个逐个表这样生成,如果同时选择多个,会自动生成双向的关联。

    弹出以下对话框:

    next:

    Generate basic typed composite IDs:

    如果数据库表格包含有多个列的主键, 将总是使用 <复合主键> 映射.
    Generate version and timestamp tags:

    如果启用, 名为 "version" 和 "timestamp" 的列将会在生成的映射文件中作为 <version> 和 <timestamp> 标记出现.

    Enable many-to-many detection:

    如果有连接表则生成双向多对多关联

    Customized Type Mappings:

    允许你来指定一个自定义的 JDBC 类型到 Hibernate 类型的转换, 使用 Length, Scale, Precision 和 Nullability 作为精度控制对应原来的 JDBC 类型.

    next(这里是配置关联关系的关键):

    这个说明以下各参数的作用:

    Table details

    这里下面可以定义实体类

    Include referenced tables (A->B)

    同时生成这个表引用的另外一个表的实体类

    Include referenced tables (A<-B)

    同时生成引用这个表的另外一个表的实体类

    Generate support for ListedTable(fk)->UnlistedTable:

    如果当前表格是一个从表,生成当前从表实体类到主表实体类访问

    Generate support for UnlistedTable(fk)<- ListedTable:

    如果当前实体类是一个主表,生成当前实体类到从表实体类访问
    下面举例说明一下:

            单向一对多关联,man访问多个phone

                   生成man实体类时候的设置(在生成的Man.hbm.xml中还需要把<set>中inverse=“true”删除):

                    

                   生成phone实体类时候的设置(勾选Exclude column from reverse engineering表示实体类中不生成manId属性):

                     


           单向多对一关联,多个phone可以访问man

                   生成man实体类时候的设置:

                    

                   生成phone实体类时候的设置:

                   


          双向一对多关联:
           同时选中man和phone表,反向生成时候同时勾选Generate support for ListedTable(fk)->UnlistedTable和Generate support for UnlistedTable(fk)<- ListedTable就可以了,系统会默认让多的一端控制关联关系。

    总结:反向生成实体类后还应该检查一下生成的实体类和配置文件是否符合要求,是否需要改动。

  • 相关阅读:
    从零开始学android开发-setBackgroundDrawable与setBackgroundResource的区别
    从零开始学android开发-用Intent启动Activity的方法
    从零开始学android开发-View的setOnClickListener的添加方法
    从零开始学android开发- 应用程序窗体显示状态操作requestWindowFeature
    从零开始学android开发- layout属性介绍
    android常见错误--Unable to resolve target ‘android
    Html+jquery mobile
    用jQuery Mobile做HTML5移动应用的三个优缺点
    Chrome Apps将可以打包成iOS或Android应用
    [转]0.python:scikit-learn基本用法
  • 原文地址:https://www.cnblogs.com/jimorulang/p/5545625.html
Copyright © 2020-2023  润新知