让 Hibernate 同时支持 xml 和注解两种映射方式
Hibernate 支持 xml 和注解两种映射方式,但是,在项目上当我们配置的时候会发现这
两种方式无法同时支持,当我们需要在一个项目上同时支持这两种方式的时候,怎么办呢?
我们先来看一下 spring 对 hibernate 映射的配置,会发现 xml 方式的时候完
成映射数据库并返回 sessionFactory 的类是
org.springframework.orm.hibernate3.LocalSessionFactoryBean,但是,注解方
式时使用的是
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBe
an 这个类。因此,要同时支持两种方式,一种不可取的方式是分别配置两种方式,那么
将在项目上出现两个 sessionFactory,很明显,这不是我们想要的,用 class 反编译工具
打开注解方式的 AnnotationSessionFactoryBean 类,会看到其实这个类继承自
LocalSessionFactoryBean 这样我们就有办法了,我们可以改一下这个类,当有 xml 的
配置的时候调用父类去完成映射。
首先,我们在 src 下建立包
org.springframework.orm.hibernate3.annotation,此处的包必须和你的 jar 包里的
一摸一样,因为项目初始化的时候 jvm 会首先去我们的 classes 下这对应的类,如果,没
有再去 lib 下的 jar 包里找,因此,这样建包,可以保证加载的是我们重写扩展的这个
AnnotationSessionFactoryBean 而不是lib 下框架原始的类,
LocalSessionFactoryBean 源码中对于 xml 文件资源的属性:
下面看看这个类的源码:
packageorg.springframework.orm.hibernate3.annotation;
importjava.io.IOException;
importjavax.persistence.Embeddable;
importjavax.persistence.Entity;
importjavax.persistence.MappedSuperclass;
importorg.hibernate.HibernateException;
importorg.hibernate.MappingException;
importorg.hibernate.cfg.AnnotationCon+guration;
importorg.hibernate.cfg.Con+guration;
importorg.springframework.context.ResourceLoaderAware;
评论2
最新资源