关于Hibernate3.2以后版本的注解映射

    Hibernate是一个开发源码的对象关系映射框架,它对JDBC进行例如非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象思维来操作数据库。
    Hibernate可以应用的任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servler/JSP的web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JAVAEE架构中取代CMP,完成数据持久化的重任。
    大多数开发机构经常采取创建各自独立的数据持久层。一旦底层的数据结构发生改变,那么修改应用的其余部分使之适应这种改变的代价是十分巨大的。Hibernate适时的填补了这以空白,它为Java应用提供了一个易用的,高效率的对象关系映射框架。Hibernte是一个轻量级的持久性框架,功能却非常丰富。
主要优点:
1.Hibernate使用JAVA反射机制而不是字节码增强程序来实现透明性。
2.Hibernate的性能非常好,因为它是一个轻量级的框架。映射的灵活性很出色。

它支持各种数据库,从一对一到多对多的各种复杂关系。

Hibernate3.2以前的版本并不支持注解映射,每一个POJO类都要对应一个映射文件(XXX.hbm.xml),在一个比较大的项目中,如果采用配置文件映射,可想而知,相当复杂,容易混乱,正好,Hibernate3.2以后版本解决了此问题,通过注解,即可完成映射,并不需要映射文件,如图:

   图中完成了id和name的映射,其中@Column表示映射的列, name 属性表示数据库中的列名,strategy 属性表示了主键是生成策略,@Entity表示实体类,@Table表示映射的表,name表示映射到数据库中的表名,其中name可以省略,前提是类名和表名相同。

    这些注解均在 javax.persistence包中,所以要导入这个包,才能使用这些注解

使用Hibernate3.2 以上版本的注解映射,需导入以下jar包:

1.       ejb3-persistence.jar

2.       hibernate-annotations.jar

3.       hibernate-commons-annotations.jar

4.       hibernate-core.jar

如果和Spring 整合,那么需要另外导入一个jar(spring.jar)

注意:

spring.jar必须是 Spring2.5以上版本的,因为,Spring2.5之前org.springframework.orm.hibernate3.LocalSessionFactoryBean类中,并没有 packageToScan 这个属性,只有mappingResuorces这个属性。而packageToScan这个属性正是映射包中的类,而mappingResuorces只是映射某个文件。

<property name=” packageToScan”>

       <list><value>com.test.po</value></list>

</property>

这样,即可完成映射。

 

在使用 Hiberante注解映射和Spring整合过程中可能遇到的异常:

  1.  如出现java.lang.NoClassDefFoundError: org/dom4j/ ,导入dom4j.jar包即可
  2. 如出现java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory    需要导入以下四个jar(1 slf4j-api-1.4.3.jar2slf4j-jdk14-1.4.3.jar3slf4j-log4j12-1.4.3.jar4log4j-over-slf4j-1.4.3.jar) 即可
  3. 如出现java.lang.NoClassDefFoundError: javax/transaction/TransactionManager  需要导入 jta.jar
  4.   java.lang.ClassNotFoundException: antlr.ANTLRException  则需要导入ant.jar
  5.   org.springframework.util.Assert.noNullElements([Ljava/lang/Object;Ljava/lang/String;)V  Invalid property 'packagesToScan' of bean class [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]: Bean property 'packagesToScan' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?   这是由于,spring.jar包的版本不符,把spring.jar换成Spring 2.5以上版本即可
  6. 6.  java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V        jar包冲突,删除asm-2.2.3.jar  即可

猜你喜欢

转载自spring-yyy.iteye.com/blog/1056917