首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate中注脚和hbm共存时的加载规律

2012-09-19 
hibernate中注解和hbm共存时的加载规律项目中使用Spring2.5+hibernate3.3+Struts2.0 注解,但是在项目的工

hibernate中注解和hbm共存时的加载规律

项目中使用Spring2.5+hibernate3.3+Struts2.0 注解,但是在项目的工作流中使用到工作流的配置文件hbm文件。所以研究一下注解和hbm的的加载顺序。

?

首先注解使用的AnnotationSessionFactoryBean 的bean:

public class AnnotationSessionFactoryBean extends LocalSessionFactoryBean implements ResourceLoaderAware;

?


?private static final String RESOURCE_PATTERN = "**/*.class";


?private Class[]?annotatedClasses;

?private String[]?annotatedPackages;

?private String[]?packagesToScan;

//注解类的类型

?private TypeFilter[] entityTypeFilters = new TypeFilter[] {
???new AnnotationTypeFilter(Entity.class, false),
???new AnnotationTypeFilter(Embeddable.class, false),
???new AnnotationTypeFilter(MappedSuperclass.class, false)};

?private ResourcePatternResolver?resourcePatternResolver?= new PathMatchingResourcePatternResolver();

?

注解中可以使用:可以使用注解类,注解包,hbm文件。

?/**
? * Specify annotated classes, for which mappings will be read from
? * class-level?JDK 1.5+?annotation metadata.
? * @see org.hibernate.cfg.AnnotationConfiguration#addAnnotatedClass(Class)
? */
?public void setAnnotatedClasses(Class[] annotatedClasses) {
??this.annotatedClasses = annotatedClasses;
?}

?/**
? * Specify the names of annotated packages, for which package-level
? * JDK 1.5+ annotation metadata will be read.
? * @see org.hibernate.cfg.AnnotationConfiguration#addPackage(String)
? */
?public void setAnnotatedPackages(String[] annotatedPackages) {
??this.annotatedPackages = annotatedPackages;
?}

?/**
? * Set whether to use?Spring-based scanning for entity classes?in the classpath
? * instead of listing annotated classes explicitly.
? * <p>Default is none. Specify packages to search for autodetection of your entity
? * classes in the classpath. This is analogous to Spring's component-scan feature
? * ({@link?org.springframework.context.annotation.ClassPathBeanDefinitionScanner}).
? */
?public void setPackagesToScan(String[] packagesToScan) {
??this.packagesToScan = packagesToScan;
?}

????????? hibernate 的注解和传统的hibernate配置:除了启动方式和配置文件有所改变之外,结合注解来使用hbiernate API和以前的的没有区别。

??? 原来的各种配置文件仍然可以使用。甚至对于同一sessionfactory,你课可以混合注解的持久类以及传统的hbm声明方式,然而你不能多次声明同一个类(注解和hbm采用其中一种),而且在一个映射实体的类继承层中,这两个配置策略不能同时使用。

?????? 为了简化从hbm文件到注解的迁移过程。配置机制将自动检测在注解和hbm文件中重复的映射,默认情况下hbm文件按中声明比类中注解元数据具有更高的优先级,这种优先级的设定是以类为单位的,

你可以通过hibernate.mapping.precedence修改这种优先级别,默认值是:hbm,class ,如果该为class,hbm,当发生冲突的时候,类中注解将比hbm文件中具有更改的优先级。

?

?

?

? 学习技术必须会对比:

在struts2.0中

通常struts2加载struts2常量的顺序如下:

struts-default.xml

struts-plugin.xml

struts.xml

struts.properties

?web.xml

在不同的配置文件里存在相同的常量的话,后者将会覆盖前者.

可以看出,struts2.0的xml中声明中属性优先加载,在这点上和hibernate有点相似。

热点排行