hibernate3 注解教程
- 格式:docx
- 大小:46.06 KB
- 文档页数:46
Hibernate Annotation笔记(1)简介:在过去几年里,Hibernate不断发展,几乎成为Java数据库持久性的事实标准。
它非常强大、灵活,而且具备了优异的性能。
在本文中,我们将了解如何使用Java 5 注释来简化Hibernate 代码,并使持久层的编码过程变得更为轻松。
传统上,Hibernate的配置依赖于外部XML 文件:数据库映射被定义为一组XML 映射文件,并且在启动时进行加载。
在最近发布的几个Hibernate版本中,出现了一种基于Java 5 注释的更为巧妙的新方法。
借助新的Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的Java 类中,并提供一种强大及灵活的方法来声明持久性映射。
即利用hibernate注解后,可不用定义持久化类对应的*.hbm.xml文件,直接以注解方式写入在持久化类中来实现。
Hibernate annotation使用了ejb JPA的注解,所以,下面安装配置hibernate annotation环境时,需要导入ejb的包。
许多网上的资料都是jpa hibernate annotation方面的资料。
(2)安装Hibernate Annotation第一步,环境与jar包:要使用Hibernate Annotation,您至少需要具备Hibernate 3.2和Java 5。
可以从Hibernate 站点下载Hibernate 3.2 和Hibernate Annotation库。
除了标准的Hibernate JAR 和依赖项之外,您还需要Hibernate Annotations .jar 文件(hibernate-annotations.jar)、Java 持久性API (lib/ejb3-persistence.jar)。
添加hibernate3.2.jar,hibernate-annotations- 3.3.0.jar,hibernate-commons-annotations.jar和ejb3-persistence.jar 。
这样就可以使用hibernate的annotation了。
如果您正在使用Maven,只需要向POM 文件添加相应的依赖项即可,如下所示:...<dependency><groupId>org.hibernate</groupId><artifactId>hibernate</artifactId><version>3.2.1.ga</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-annotations</artifactId><version>3.2.0.ga</version></dependency><dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0</version></dependency>第二步,获取Hibernate 会话工厂。
尽管无需惊天的修改,但这一工作与使用Hibernate Annotations 有所不同。
您需要使用AnnotationConfiguration 类来建立会话工厂:sessionFactory = new AnnotationConfiguration().buildSessionFactory();第三步,尽管通常使用<mapping>元素来声明持久性类,您还是需要在Hibernate 配置文件(通常是hibernate.cfg.xml)中声明持久性类:<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><mapping class="com.onjava.modelplanes.domain.PlaneType"/><mapping class="com.onjava.modelplanes.domain.ModelPlane"/></session-factory></hibernate-configuration>近期的许多Java 项目都使用了轻量级的应用框架,例如Spring。
如果您正在使用Spring 框架,可以使用AnnotationSessionFactoryBean 类轻松建立一个基于注释的Hibernate 会话工厂,如下所示:<!-- Hibernate session factory --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource"><ref bean="dataSource"/></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop><prop key="hibernate.hbm2ddl.auto">create</prop>...</props></property><property name="annotatedClasses"><list><value>com.onjava.modelplanes.domain.PlaneType</value><value>com.onjava.modelplanes.domain.ModelPlane</value>...</list></property>< /bean>(3)hibernate Annotation标签的使用:[1]注解综述1.带注释的持久性类也是普通POJO,它们只是具备了持久性注释的普通POJO 。
2.事实上,您既可以保持字段的持久性(注释写在成员变量之上),也可以保持属性(注释写在getter方法之上)的持久性。
3.常用的hibernate annotation标签如下:@Entity --注释声明该类为持久类。
将一个Javabean类声明为一个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若在类中,添加另外属性,而非映射来数据库的, 要用下面的Transient来注解.@Table(name="promotion_info") --持久性映射的表(表名="promotion_info).@Table是类一级的注解,定义在@Entity下,为实体bean映射表,目录和schema的名字,默认为实体bean 的类名,不带包名.@Id--注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键)。
@GeneratedValue --定义自动增长的主键的生成策略.@Transient --将忽略这些字段和属性,不用持久化到数据库.适用于,在当前的持久类中,某些属性不是用于映射到数据表,而是用于其它的业务逻辑需要,这时,须将这些属性进行transient的注解.否则系统会因映射不到数据表相应字段而出错.@Temporal(TemporalType.TIMESTAMP)--声明时间格式@Enumerated --声明枚举@Version --声明添加对乐观锁定的支持@OneToOne --可以建立实体bean之间的一对一的关联@OneToMany --可以建立实体bean之间的一对多的关联@ManyToOne --可以建立实体bean之间的多对一的关联@ManyToMany --可以建立实体bean之间的多对多的关联@Formula --一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等)@OrderBy --Many端某个字段排序(List)Hibernate 能够出色地自动生成主键。
Hibernate/EBJ 3 注释也可以为主键的自动生成提供丰富的支持,允许实现各种策略。
其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法, JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出.JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)AUTO:主键由程序控制。
在指定主键时,如果不指定主键生成策略,默认为AUTO。
@Id相当于@Id@GeneratedValue(strategy = GenerationType.AUTO)identity:使用SQL Server 和MySQL 的自增字段,这个方法不能放到Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和SQL Server 中很常用)。