Hibernate实体类打入jar包
来源:互联网 发布:知乎 出租屋衣帽架 编辑:程序博客网 时间:2024/05/21 06:21
引子
==============================
最近一个项目,需要将前端应用系统与后端控制台分别发布.但是使用的是同一个数据库.为了代码统一,我决定将Hibernate的实体类(pojo或ho)和hbm文件单独打入一个jar包中复用.
实践第一步:抽取实体类与hbm入jar包.
==============================
在这一步,很多人可能和我一样,以往对于Hibernate打入jar包的做法,只是停留在概念上,从未真正实践过.一般都会将实体类与hbm从原项目中抽取出来,单独做成一个项目.
建立实体类库:
在Netbeans中很简单,新建一个Java类库项目,比如叫ho_prj,将实体类放进[源码]目录中.当然,项目中还需要引入相关的类库,比如Hibernate3.jar等.否则编译无法通过.
这时,原本的项目,应该会提示有编译错误.因为实体类都被移走了,引用到它们的类自然就出错了.
接下来,将右击原项目,进入属性窗口.在库一页中,选择引入项目,然后选择ho_prj项目.这样就解决编译出错的问题了.
建立hbm配置包:
建立一个Java类库项目,叫做hbm_prj,将hbm文件放进[源码]目录中.
进入原项目的属性窗口,选择打包页->添加项目,选择hbm_prj项目,回到属性窗口页面,将[WAR中的路径]改为/WEB-INF/.你也可以改为别的路径,但不能是/WEB-INF/lib/目录.另外,为了安全性,建议在WEB-INF路径下.
这里为什么要建两个项目,而不直接一个jar包打入实体类和hbm文件呢?因为在类装载时,web容器会将所有的lib目录下的jar包都载入,而Hibernate在读取hbm时,会再次装载jar包.这样就会导致Hibernate映射出现重复异常.因此,在这里将hbm再单独打一个jar包.并放在lib目录之外,就不会出现重复异常了.
注:这个现象应该是Hibernate的一个Bug.可能是Hibernate在读取jar包时,没有检查jar包是否已经被读取过了.
实践第二步:修改Hibernate配置
==============================
我这个项目是基于SSH的,因此,实际上是要修改spring配置文件,一般都叫applicationContext.xml.打开它.
找到Hibernate的配置部分.
<bean id="sessionFactory" lass="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingLocations"> <list> <value>classpath:/com/myc/prj/*.hbm.xml</value> </list> </property> ........................</bean>
这是我们通常的写法,不过这样是不能从jar包中读取数据的.需要加入下面的内容
<property name="mappingJarLocations"> <list> <value>WEB-INF/hbm_prj.jar</value> </list></property>那么完整的内容就应该是:
<bean id="sessionFactory" lass="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingJarLocations"> <list> <value>WEB-INF/hbm_prj.jar</value> </list></property> <property name="mappingLocations"> <list> <value>classpath*:/com/myc/prj/*.hbm.xml</value> </list></property> ........................</bean>
注意,classpath后面多加了一个*号.
实践第三步:运行:
==============================
将原项目[清理并生成]后点击运行(我个人的做法是先将服务器停止,然后清理并生成,最后直接运行服务器,这样要比运行快很多.)
现在项目应该可以正常运行了.
常见问题:
================================
1. Duplicate class/entity mapping问题:
检查是否将hbm_prj.jar放到WEB-INF/lib目录了.注意,如果不小心将hbm_prj项目做为库引入的话,IDE会自动将hbm_prj.jar放到lib目录中去.
- Hibernate实体类打入jar包
- maven将依赖打入jar包
- Maven将依赖打入jar包
- 将maven依赖一并打入jar包
- maven 将依赖打入jar包
- Android如何将非系统jar包打入系统包
- Android 如何将非系统jar包打入系统包
- maven 工程把依赖包打入jar包
- 将properties文件打入jar包,并能读取
- maven 把本地的jar打入到发布包中
- maven将fnlp本地jar打入war包
- android studio将assets打入jar包中
- android studio中不将第三方jar包打入aar中
- 将外部jar包打入本地maven仓库
- maven打包时候将依赖jar包打入
- 如何将jar包打入到本地maven库中
- 将jar包打入maven库中的命令
- Android Studio生成自定义jar包(同时将assets目录打入jar包)
- VS打开.net工程提示"无法读取项目文件"web.csproj",系统找不到指定路径"
- 简单批处理命令简介
- 语音信号的产生模型
- Oracle Golden Gate 系列十 -- 配置 Data Pump process 说明 与 示例
- Delphi SQL数据库存取图片(利用流)
- Hibernate实体类打入jar包
- 简单用js实现网页时间的实时显示
- XML配置文件
- Linux C程序如何检测WIFI无线USB网卡是否可用?
- 黑马程序员-----反射机制的学习
- 子集的二进制算法
- “21天教你学会C++”
- 。
- ♫ ♪ ஜ 2011年11月 歌单 •ิ.•ั๑