Hibernate学习之 -- 使用Middlegen-Hibernate-r5创建oracle10g的table的hibernate映射文件,Hibernate学习笔记三 ---持久化类和关系数据库的映射

4 篇文章 0 订阅
4 篇文章 0 订阅

1.下载Hibernate-middlegen

打开http://sourceforge.net/projects/hibernate/files/

下载 Middlegen-Hibernate-r5.zip

 

2.安装 middlegen

将1下载的文件解压缩至c盘。解压后目录结构是 C:/Middlegen-Hibernate-r5

 

3.Middlegen-Hibernate-r5的配置

① 把数据库驱动程序ojdbc14.jar放到C:/Middlegen-Hibernate-r5/lib目录下。

② 配置数据参数 C:/Middlegen-Hibernate-r5/config/database/oracle.xml

 

   <!-- =================================================================== -->
   <!-- ant properties/targets for oracle 8/9                               -->
   <!-- note: this is not a proper xml file (there is no root element)      -->
   <!--       it is intended to be imported from a *real* xml file          -->
   <!-- =================================================================== -->

   <!-- please set your Oracle-SID according to your needs -->

   <property environment="env"/>

   <property name="database.script.file"           value="${src.dir}/sql/${name}-oracle.sql"/> -->自带 sample表生成用sql。根据具体情况可替换成自己的,或者删除。

   <property name="database.driver.file"           value="ojdbc14.jar"/> --->指定驱动程序
   <property name="database.driver.classpath"      value="C:/Middlegen-Hibernate-r5/lib/"/>
   <property name="database.driver"                value="oracle.jdbc.driver.OracleDriver"/> 
   <property name="database.url"                   value="jdbc:oracle:thin:@127.0.0.1:1521:XE"/>  ---> URL
   <property name="database.userid"                value="xiehl"/>     -->用户名
   <property name="database.password"              value="0455"/>   -->密码
   <property name="database.schema"                value="XIEHL"/>  -->schema
   <property name="database.catalog"               value=""/>

   <!--property name="jboss.datasource.mapping"       value="Oracle7"/-->
   <property name="jboss.datasource.mapping"       value="Oracle10g"/>  -->oracle版本设定
   <!--property name="jboss.datasource.mapping"       value="Oracle9i"/-->

 

注意问题1:

在oracle中要指定 <property name="database.schema"  value="username"/>如未指则在生成时会出问题.value值和database.userid值一样。

如未指定schema,则会有以下错误。

 

 

 

 

 

 

 

 

注意问题2:

 如果未删除oracle10g中的垃圾表如"BINjR8PK5HhrrgMK8KmgQ9nw== "见分则会出现如下错误:

 D:Middlegen-Hibernate-r5build.xml:148: middlegen.MiddlegenException: Database
problem:ORA-01424: 转义符之后字符缺失或非法

问题解决办法:删除oracle10g中的垃圾表然后再按生成步骤进行,删除oracle10g中的所有垃圾表见文章如http://blog.csdn.net/inber/archive/2006/07/22/958372.aspx

 

 4.配置middlegen跟目录下的build.xml

build.xml是Middlegen-Hibernate的ant构建配置。Middlegen-Hibernate将根据build.xml文件中的具体参数生成数据库表映射文件。可配置的项目包括:

①目标数据库配置文件地址

查找关键字"!ENTITY",得到

<!DOCTYPE project [
    <!ENTITY database SYSTEM "./config/database/hsqldb.xml">
]>

 

将其改成自己的数据库配置文件地址

<!DOCTYPE project [
    <!ENTITY database SYSTEM "./config/database/oracle.xml">
]>

 

② Application Name

  查找 <property name="name" value="airline"/>

 

  改成自己希望的名字

 <property name="name" value="HibernateSample"/>

 

③ 输出目录

   查找关键字 "name="build.gen-src.dir"",得到<property name="build.gen-src.dir" value="${build.dir}/gen-src"/>

   修改value使其指向我们自己的目录。根据需要也可不改。

④ 对应代码的package   name

    查找关键字 destination,得到

         <hibernate
            destination="${build.gen-src.dir}"
            package="${name}.hibernate"
            genXDocletTags="false"
            genIntergratedCompositeKeys="false"
            javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
         />

 

根据需要将其改成自己的。

         <hibernate
            destination="${build.gen-src.dir}"
            package="jp.co.xiehl.domain"
            genXDocletTags="true"
            genIntergratedCompositeKeys="false"
            javaTypeMapper="middlegen.plugins.hibernate.HibernateJavaTypeMapper"
         />

这里还有一个属性genXDocletTags,如果设置为true,则生成的代码将包含xdoclet tag,这为以后在开发过程中借助xdoclet进行映射调整提供了帮助。

注意

如果数据库是sqlserver,则需要将build.xml中如下部分删除,否则Middlegen会报出找不到表的错误。

 

      <middlegen
         appname="${name}"
         prefsdir="${src.dir}"
         gui="${gui}"
         databaseurl="${database.url}"
         initialContextFactory="${java.naming.factory.initial}"
         providerURL="${java.naming.provider.url}"
         datasourceJNDIName="${datasource.jndi.name}"
         driver="${database.driver}"
         username="${database.userid}"
         password="${database.password}"
         schema="${database.schema}"  ---------> sqlserver时,删除
         catalog="${database.catalog}"   ---------> sqlserver时,删除

      >

 

至此,hibernate的配置完毕。

 

5.运行ant,启动Middlegen GUI界面

启动dos界面,进入C:/Middlegen-Hibernate-r5根目录。

运行ant,即可看到GUI界面。

 

 

 
6.MiddleGen界面说明
进入Middlegen的GUI界面后,可以看到,数据库中的表结构已经导入到MiddleGen的操作界面中,选定数据库表视图中的表元素,我们即可调整各个数据库表的属性。
1.Domain Class Name   对应POJO的类名。
2.Key Generator

  主键生成器

  可选项说明:

   ①assigned.主键由外部程序生成,无需Hibernate参与。

   ②hilo 通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

   ③seqhilo  与hilo类似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如 

      Oracle。

   ④increment  主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键

      的时候将此值加1作为主键。

      这种方式可能产生的问题是,如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能产生相同主键,

      从而造成主键重复异常。因此,同一数据库有多个实例访问,此方式必须避免使用。

 

 

   ⑤identity  采用数据库提供的主键生成机制。如 DB2,sql server,Mysql中的主键生成机制。

   

   ⑥sequence 采用数据库提供的sequence机制生成主键。如oracle中的sequence机制。

 

   ⑦native  由Hibernate根据底层数据库自行判断采用identity,hilo,sequence其中一种作为主键生成方式。 

  

   ⑧uuid.hex 由Hibernate基于128位唯一值产生算法生成16进制数值(编码后以长度32的字符串表示)作为主键。

 

   ⑨uuid.string 与uuid.hex类似,只是生成的主键未进行编码(长度16).在某些数据库中可能出现问题(如PostgreSQL)。

  

   ⑩foreign 使用外部表的字段作为主键。

 

一般而言,使用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性。

另外,由于常用的数据库,如oracle,DB2,SqlServer,MySql等,都提供了易用的主键生成机制(auto-Increase字段或者sequence)。我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式。

 

3.key-generator后面的可输入部分。  如果需要采用定制的主键产生算法,则在此处配置主键生成器,主键生成器必须实现net.sf.hibernate.id.IdentifierGenerator接口。

 

4.Schema Name  数据库Schema Name 

 

5.Persister 自定义持久化实现类类名。如果系统中还需要Hibernate之外的持久层实现机制,如通过存储过程得到目标数据集,甚至从

   LDAP中获取数据来填充我们的POJO。

          6.Enable proxies 是否使用代理(用于延迟加载[Lazt Loading])

 

          7.Dynamic Update  如果选定,则生成UPDATE SQL时不包含未发生变动的字段属性,这样可以在一定程度上提升sql执行效能。

         

          8.Mutable  类是否可变,默认为选定(可变)。如果不希望应用程序对此类对应的数据进行修改(如对于数据库视图),则可取消其选定状态,

             之后对此类的delete和update都将失效。

 

          9.Lifestyle interface  是否实现lifestyle接口。lifestyle接口提供了数据固化过程中的控制机制,通过实现该接口,

               我们可以在数据库操 中加入回调机制,如在数据库操作之前,之后触发指定操作。

 

          10.Validatable interface  是否实现Validatable 接口。通过实现Validatable 接口,我们可以在数据被固化到数据库表之前对

                                             其合法性进行验证。

                  要注意的是,通过实现lifestyle接口,同样可以在数据库操作之前进行合法性验证。不同的是,Validatable 接口中定义的方法

                  可能会被多次调用,因此设计中应避免在Validatable 接口的validate方法的实现中加入业务逻辑的验证。

 

以上是针对class的设置。

同样,可对字段进行类似设置。

 

设置好后,点击gui上部的Generate即可生成我们需要的xml映射文件。

 

 

 

D:Middlegen-Hibernate-r5build.xml:148: middlegen.MiddlegenException: Middlegen
 successfully connected to the database, but couldn't find any tables. Perhaps t
he specified schema or catalog is wrong? -Or maybe there aren't any tables in th
e database at all?
Configured schema:
Configured catalog:
Available schemas:

  ANONYMOUS
  CTXSYS
  ...

Available catalogs:

 

解决办法是按照以上方法正确配置schema及其他项目。

,

 

Middlegen: 从数据库中已有 的表结构中生成Hibernate映射文 件。当前版本是2.1可以去http://boss.bekk.no/boss/middlegen下载。
 
 
XDoclet它通过在Java源代码中加入特定的JavaDoc tag,从而为其添加特定的附加语义,之后通过XDoclet工具对代码中JavaDoc Tag进行分析,自动生成与代码对应的配置文件(http://xdoclet.sourceforge.net/)。
XDoclet提供了对Hibernate的支持,这样我们可以直接由Java代码生成Hibernate映射文件。
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值