萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 3100|回复: 10

(原创)用Middlegen快速开发Hibernate (on Oracle DB)

[复制链接]
发表于 2008-1-1 19:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
How to use MiddleGen to quickly develope Hibernate
1)Download and Install Middlegen from below link
    http://www.hibernate.org/98.html
2)Delete garbage tables in your Oracle DB ,if you have .

3) Configure middlegen,base on example of oracle database

   3.1) configures middlegen-2.1\samples\config\database\oracle.xml

   <property name="database.driver.file"           value="D:\Oracle\Ora81\jdbc\lib\classes12.jar"/>
   <property name="database.driver.classpath"      value="${database.driver.file}"/>
   <property name="database.driver"                value="oracle.jdbc.driver.OracleDriver"/>
   <property name="database.url"                   value="jdbc:oracle:thin:@144.194.192.159:1521:ORA2008"/>
   <property name="database.userid"                value="scott"/>
   <property name="database.password"              value="1234"/>
   <property name="database.schema"                value="ORA2008"/>

   3.2) configures   middlegen-2.1\sample\build.xml

      <hibernate
            destination="${build.gen-src.dir}"
            package="${name}.hibernate"   // configurate boms.entity for package name
            genXDocletTags="true"
            javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
      />
4) run ant middlegen to genarate hbm.xml files
   
5) Do some modification before generate java file from xml files
     For example. Change mapping file names
     Remove old DTD data ,replace with DTD for Hibernate  3.0
      
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

6)run ant hbm2java to genarate java source code
     for running middlegen with gui
      <middlegen
         appname="${name}"
         prefsdir="${src.dir}" // set gui=true
         gui="${gui}

  

7)Replace table with enum datatype in Hibernate

Example, OfferType table will be replaced by OfferType enum

Offer table refers OfferType table
Offer class will use OfferType enum to replace OfferType class.

7.1delete OfferType.xml
7.2delete association in Offer.xml which is related to OfferType (one-to-one, many-to-one)
7.3replace below content in Offer.xml

          <property name="offerType" column="OFFER_TYPE_KEY"
                        type="hibernate.types.OfferTypeUserType"
                        not-null="true">
                <meta attribute="field-description">
                        @hibernate.property column name="OFFER_TYPE_KEY"
                        not-null="true"
                </meta>
                </property>
  7.4 open Offer.java
   modify as below  

  /** persistent field */
    private  enums.OfferType offerType;
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-1-4 23:51 | 显示全部楼层
感觉楼主似乎专职研究hibernate啊

以前也用过一个叫hibernate synchronizer的工具,可以自动的把数据表转换成hibernate entity

不知道上述的对新的JPA规范有没有用?
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2008-1-5 14:36 | 显示全部楼层
感觉楼主似乎专职研究hibernate啊

>我不是专职研究Hibernate的, 好象没有这个工作岗位 :-)
以前也用过一个叫hibernate synchronizer的工具,可以自动的把数据表转换成hibernate entity
> 听说过 synchronizer ,不过我没用过.
不知道上述的对新的JPA规范有没有用?
>Middlegen在新的JPA下一样可以用,不过只能生成符合JPA规范的Hibernate类和Mapping文件,不能生成内嵌Annotation(用来取代Mapping文件)的Hibernate类
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-1-5 23:07 | 显示全部楼层
记得楼主上次就发了一个hibernate cascade帖,比较深奥,还是用英语的

用JPA配Hibernate的Mapping文件,不由得让人有半调子的感觉,还是直接Annotation比较好。虽然俺现在还没有找到顺手的工具,但是同学里已经有人在用MDA工具编写批量处理了
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2008-1-6 21:47 | 显示全部楼层
记得楼主上次就发了一个hibernate cascade帖,比较深奥,还是用英语的
>>自己写的一些使用的经验总结,看到这里也有人贴Hibernate的贴子就贴出来了.
用JPA配Hibernate的Mapping文件,不由得让人有半调子的感觉,还是直接Annotation比较好。虽然俺现在还没有找到顺手的工具,但是同学里已经有人在用MDA工具编写批量处理了
>>... ... $支持$
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-1-6 22:09 | 显示全部楼层

回复 #2 大镖客 的帖子

概念有点反了, 是应该从class diagram 入手, 用oo的观点找出entities 和关系, 构造hibernat的Mapping, 然后生成成数据库的tables.

如果想从已经存在的DB Tables 生成 Hibernate 的 Mapping, pojo classes, 可以用 Hibernate Tools, 有专门的Eclipse Plugin.

在JDeveloper里,有专门的JPA Template, 可以由DB Tables 生成 Entity Bean, 之后可以写NamedQueries, 最后可以自动生成一个Service class. 不过JDeveloper里面的Class Diagram 好像还不能直接转成相对的Java codes, 不过以后的方向应该是 MDA, 有Domain model 入手 => OO => DB Tables.

[ 本帖最后由 woo2333 于 2008-1-6 21:21 编辑 ]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-1-7 00:04 | 显示全部楼层
persistence应该是双方面的吧,既能自动存储,也能够自动调用。但是现在碰到的projekt,都是要求在现有的数据库上实现persistence,也就是首要任务是通过旧数据库表添加java entity

hibernate tools对付2.0还有用,但是对于3.0完全的JPA支持以及annotation就不好用。现在手上的annotation几乎都是手动添加的,很繁琐,但如果用mapping文件似乎又失去了JPA本身的意义。相信类似的专业工具很快也会有。

[ 本帖最后由 大镖客 于 2008-1-6 23:08 编辑 ]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2008-1-7 10:24 | 显示全部楼层
概念有点反了, 是应该从class diagram 入手, 用oo的观点找出entities 和关系, 构造hibernat的Mapping, 然后生成成数据库的tables.
>>个人认为应该有两者方法. 一个是正向工程, 从Hibernate -> 数据库, 还有一个是反向工程, 从数据库->Hibernate
>>两个方法个有利弊, 正向工程的缺点是这样以来, 编码和搭建数据库的工作就都落在程序员的身上, 对程序员要求较高, 而一般来说,数据库DBA的建立数据库的经验要比程序员
>>丰富,更能胜任复杂数据库的设计和建立任务.
>>反向工程的缺点是, 数据库必须已经建立,否则无法进行编码工作.
>>从实际情况来看,很小的项目,正向反向差别不太大,复杂的项目,一般用反向工程多些.

如果想从已经存在的DB Tables 生成 Hibernate 的 Mapping, pojo classes, 可以用 Hibernate Tools, 有专门的Eclipse Plugin.
hibernate tools对付2.0还有用,但是对于3.0完全的JPA支持以及annotation就不好用。现在手上的annotation几乎都是手动添加的,很繁琐,但如果用mapping文件似乎又失去了JPA本身的意义。相信类似的专业工具很快也会有。
>>在hibernate的论坛上看到 xdoclet可以把pojo + mapping转化成 带annotation的pojo.不过我没用过.不知道效果如何.
>>关与annotation和mapping那个更好,我觉得,annotation的好处是把标签和 pojo 放在一起.程序员阅读方便了. 不便的地方是要求平台JDK5.0以上才能支持annotation
>>mapping的缺点是 tag 和 pojo分离,不方便程序员的阅读,好的地方是可以也在JDK5.0以下平台上运行,向下兼容.
>>工具只能帮程序员动态生成个大概,细节或根据实际情况要改动的地方只能靠程序员手工完成.

[ 本帖最后由 stewchicken 于 2008-1-7 11:31 编辑 ]
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-1-8 00:02 | 显示全部楼层
>> 两个方法个有利弊, 正向工程的缺点是这样以来, 编码和搭建数据库的工作就都落在程序员的身上, 对程序员要求较高, 而一般来说,数据库DBA的建立数据库的经验要比程序员
丰富,更能胜任复杂数据库的设计和建立任务.
DBA 写的表格不一定适用于OO, ER和OO是不一样的,95%以上的DBA不可能具备OO的思想。

>> DB Tables to EJB3 Entity Bean 在JDeveloper是非常非常简单的, 建立DB connection, 然后自动生成EJB3 规范的Entity Bean, Service Classes.
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-1-8 19:26 | 显示全部楼层
$支持$  woo的想法很不错!

不知道这里有谁用过octopus?--UML+OCL 的MDA工具,是eclipse plugin.

以前合作过这个open source。从domain mode(uml+ocl) 到OO,并曾试图根据uml里的各个relationship直接产出ejb3 entity annotation。但是缺点是,转化非常的僵化,因为mapping的是class diagram里的relationship和ER图里的relationship,没法在细节上对上号,即使,ER里的constraints都用ocl规约对应也非常的勉强。

Gavin King自己说过hibernate再出色,如今的orm里还是有db和oo之间的空隙。MDA里,光一个uml的class diagram根本不够,即使加state diagram+ocl规约,也不一定能得到开发者脑袋里想要的oo,所以这又是uml+ocl和产生oo之间的空隙。由此可见,到目前为止,从domain model到oo再到DB,mapping的空隙太大,造成的结果是:不实用。这也是现在mda尴尬境地的表现之一,pim/pdm/psm的无缝映射太过柏拉图。

我记得两年前有家公司做过在java ee里mda应用工具的测试报告。结论写得很有趣:mda工具就象把先进方便的脑颅手术刀,但遗憾的是只有专家知道怎么用,如果找个清洁工来,病人必死。但是让一个清洁工都能开脑颅不是mda的终极目标吗?

:D 瞎扯一统,作为笑资吧。:D

顶此贴里的所有XDs!$支持$ $送花$
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-5-21 08:28 , Processed in 0.065033 second(s), 19 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表