Hibernate3应用小结及问题

 
 

           之前对Hibernate有些了解,知道要自己动手写大量的hbm.xml配置文件和POJO对象会比较没有效率,因此,学习Hibernate的第一步就是找一找相关的自动生成工具。并由此开始我的Hibernate之旅。

                通过在网上的了解,大致上可以找到三种方案来做上述的自动工作:

                1、利用MyEclipse自带的Hibernate支持功能

                2、利用第三方工具Hibernate Synchronizer

                3、利用MiddleGen和Hibernate-extensions的组合

                下面就每个方式都说说我使用的情况和一些问题:

                1、MyEclipse方式

                我使用的是Eclipse3.3和MyEclipse6的组合,在这种环境下要使得项目具备Hibernate的功能比较简单,需要如何操作在网上也有铺天盖地的说明,我就不多说了。需要强调的是使用MyEclipse的这种方式,需要先通过MyEclipse Database Explorer建立一个数据库试图,并在表上右键选择Hibernate Reverse Enginnering来完成建立xml配置文件、POJO、DAO等的过程。

            问题:按照网上的说明,我顺利的生成了所有的POJO类和每个实体类的hbm.xml配置文件,以及SessionFactory,之后我认为大功基本告成。于是很高兴的写了个Test,这个Test的主要作用就是测试一下save某个POJO对象实例。但是,当我运行这个Test时,却报了错!Duplicate class/entity mapping XXX。开始以为是在hibernate.cfg.xml配置文件里多配了,于是找到该配置文件中,删除掉所有的mapping记录。接着运行,但仍然抱错。这次报的却是找不到配置文件。后来没有办法,上网找了一圈,有不少和我遇到相似问题的,也有很多解决方案,却没有找到一个对我的问题起作用的。在经过反复折腾后,我发现自动生成的那些POJO配置文件的<hibernate-mapping>标签中,没有package这个属性,于是试着加上package。然后运行。结果,好了!

               2、Synchronizer方式

              从网上下载了相应的插件安装后,在项目任意文件夹下右键选择New -> Other,应该可以看到一个Hibernate的一级目录。打开该目录后,根据需要选择建立cfg.xml或者hbm.xml。过程也比较简单。建立完配置文件后,在hbm.xml配置文件上右键选择Hibernate Synchronizer -> Synchronize Files即可生成POJO类和DAO等基本类。

           问题:在使用由Synchronizer生成的对象和配置文件时,刚开始始终会报错Could not parse configuration。错误日志输出Error parsing XML: (1) Content is not allowed in prolog。通过调式发现,Synchronizer自动生成的_BaseRootDAO类有一个逻辑错误。在BaseRootDAO中,SessionFactory的建立可以通过默认的配置文件或者用户指定的配置文件来完成。通常,我们都是用默认的方式建立,即在classpath中放置hibernate.cfg.xml文件,这样通过new Configuration().configure().buildSessionFactory()方法即可建立SessionFactory。在这种情况下,我们传给_BaseRootDAO中getSessionFactory方法的configFileName参数的值为null。而在该方法中,程序进行了判断,并把这个null值置空。而正是这个置空的操作导致最终initilize方法无法找到hibernate.cfg.xml配置文件。因为在initilize中的判断条件是当null == configFileName时,才会去通过默认的方式配置SessionFactory,否则将通过读configFileName的配置文件方式创建,此时configFileName为空,当然找不到配置文件了。解决方案之一就是在initilize的判断逻辑中加一个或者 configFileName.trim().equals("")即可

             3、MiddleGen和Extensions方式

             这种方式我只是通过MiddleGen成功的生成了xml配置文件,这个具体操作网上有很多。然而当我试着通过Extension的hbm2java方法生成POJO对象时,由于我使用的是Hibernate3,而Extensions组件在Hibernate3下配置classpath时比较烦人,所以我也就放弃了。感觉应该在Hibernate2下,使用MiddleGen和Extensions的方式还是应该会比较顺利的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值