java

位置:IT落伍者 >> java >> 浏览文章

Spring动态加载Hibernate映射文件


发布日期:2022年03月18日
 
Spring动态加载Hibernate映射文件
近来还在整通用的业务系统框架采用插件的方式加载需要的配置之前已实现了spring和struts配置的动态加载现在剩下Hibernate的映射文件动态加载还没实现于是搜资料查源码终于实现之

重写SessionFactory类

新建一个类继承orgspringframeworkormhibernateLocalSessionFactoryBean

重写newSessionFactory(Configuration config)

在该方法中调用configaddFile()方法增加需要动态加载的hbm文件主要代码

[java]

public class ShineSessionFactoryBean extends LocalSessionFactoryBean{

@Override

protected SessionFactory newSessionFactory(Configuration config) throws HibernateException {

configaddFile(xxhbmxml //这里将要增加的hbm配置文件都加载到config中

configaddFile(xxhbmxml

return supernewSessionFactory(config)

}

}

修改Spring配置文件

将原来的orgspringframeworkormhibernateLocalSessionFactoryBean改成重写后的类将之前在这里配置的hbm路径去掉或者保留但不要和插件注入的hbm文件重复其他属性还是一样

[html]

<bean id=sessionFactory class=comshinespringShineSessionFactoryBean>

<property name=dataSource ref=dataSource />

<! hbm文件已改成通过插件加载

<property name=mappingLocations>

<list>

<value>classpath*:com/shine/**/entity/hbm/*hbmxml</value>

</list>

</property>

>

</bean>

然后重启后生效整合在系统中时得注意几个问题

如果newSessionFactory中是从系统的全局变量中取需加载的hbm文件的话得在spring容器初始化前就给该全局变量设置好值

动态加载的hbmxml文件时确保文件路径是存在的如果要加载的配置文件在jar包中或者不在本机的得针对该配置文件的读取再做封装

如果系统中需有多个SessionFactory时得让不同的SessionFactory加载不同的hbm配置文件(我通过为SessionFactory增加ID属性来控制)

               

上一篇:用ActionForward优化你的Struts应用程序

下一篇:关于Java单元测试中的伪对象介绍(图)