知识大全 Hibernate 3 Annotations 进阶

Posted 文件

篇首语:女人错过了那个想嫁给的男人,就会变得挑剔,男人错过了那个他最想娶的女人,就会变得随意。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate 3 Annotations 进阶相关的知识,希望对你有一定的参考价值。

Hibernate 3 Annotations 进阶  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  摘要:    这些年来 Hibernate几乎已经成为java世界中数据库持久化方面事实上的标准 它强大灵活并且性能优秀 在这篇文章中 我们来看一下Java 的注解功能怎么简单地用在你的hibernate代码中让你的持久化层变得更容易 这些年来 Hibernate几乎已经成为java世界中数据库持久化方面事实上的标准 它强大灵活并且性能优秀 在这篇文章中 我们来看一下Java 的注解功能怎么简单地用在你的hibernate代码中让你的持久化层变得更容易

  在过去 Hibernate 依靠外部的XML文件来配置持久化对象 数据库映射文件定义在一组XML映射文件里并且在程序开始的时候被装载 有很多办法来创建这些映射文件 或者自动从一个已存在的数据库模式里创建 或者手动从java类对象中创建 不管那种情况 你都得产生一大堆Hibernate 映射文件而结束工作 你也可以利用外部工具从javadoc style 的注解中生成映射文件 但这给你的开发流程增加了额外的负担

  在最近的Hibernate版本里 一个新的建立在Java 注解之上更为优雅的方法出现了 利用新的Hibernate Annonations 库 你可以发布一次如你以前的映射文件所定义的信息 你猜到了 注解直接嵌入你的Java类文件里 注解带来了一种强大灵活地声明持久化映射的办法 在最新版的几个Java集成开发环境里都很好的支持 并带有代码自动完成和语法高亮功能

  Hibernate annotations 也支持最新的EJB 持久化规范 这些规范目的是提供一个标准的Java持久化机制 当然Hibernate 也提供了更多的解决方案 你能非常容易的靠近保准并且利用EJB 编程模型编写你的Hibernate持久化层

  现在让我们一步步了解Hibernate Annotations 安装 Hibernate Annotations    为了使用Hibernate Annotations 你需要最新的Hibernate 当然还有Java 你可以在Hibernate web site 这个网站下载Hibernate 和Hibernate Annotations库 除了标准的Hibernate 库文件和必须的依赖库之外 还需要下载 Hibernate Annotations库和Java 持久化API ejb persstence jar文件 如果你正在使用Maven 仅仅添加相应的依赖到你的DOM文件里 如下所示:

       <dependency>      <groupId> hibernate</groupId>      <artifactId>hibernate</artifactId>      <version> ga</version>    </dependency>    <dependency>      <groupId> hibernate</groupId>      <artifactId>hibernate annotations</artifactId>      <version> ga</version>    </dependency>    <dependency>      <groupId>javax persistence</groupId>      <artifactId>persistence api</artifactId>      <version> </version>    </dependency>

  下一步是获得一个Hibernate Session 工厂 利用Hibernate Annotations与不使用它创建Hibernate session工厂有一点不同 虽然不需要大幅度修改 你只需须简单地使用AnnotationConfiguration类安装你的session工厂     

  sessionFactory=new AnnotationConfiguration() buildSessionFactory();

  一般的 你需要通过<mapping>元素在Hibernate配置文件里(hibernate cfg xml)声明持久化类  

  <hibernate configuration>          <session factory>            <mapping class= onjava modelplanes domain PlaneType />            <mapping class= onjava modelplanes domain ModelPlane />          </session factory>  </hibernate configuration>

  如今许多java 工程都使用轻量级的程序框架例如Spring 如果你正在用Spring框架 你可以容易地利用AnnotationSessionFactory类装配一个基于Annotations 的Hibernate Session Factory 如下:

  <! Hibernate session factory >  <bean id= sessionFactory class= springframework orm hibernate annotation AnnotationSessionFactoryBean >   <property name= dataSource >     <ref bean= dataSource />   </property>   <property name= hibernateProperties >     <props>       <prop key= hibernate dialect > hibernate dialect DerbyDialect</prop>       <prop key= hibernate hbm ddl auto >create</prop>            </props>   </property>   <property name= annotatedClasses >     <list>       <value> onjava modelplanes domain PlaneType</value>       <value> onjava modelplanes domain ModelPlane</value>            </list>   </property> </bean>

我们第一个持久化类    现在我们知道如何获得基于Annotation的Hibernate Session 让我们看看这个注解的持久化类看起来像什么样子     被注解的持久化类是一般的POJO类 就像在其他Hibernate程序里的一样 好的 差不多了 你需要依赖于Java 持久化API (javax persistence *) 并且还需要导入注解包类( hibernate annotations *)如果你使用了任何Hibernate扩展的话 但是除此之外 他们仅仅是拥有持久化相关注解的POJO 这有个例子:

  @Entitypublic class ModelPlane     private Long id;    private String name;        @Id    public Long getId()         return id;        public void setId(Long id)         this id = id;        public String getName()         return name;        public void setName(String name)         this name = name;

  如我们所言 非常简单 @Entity注解声明类将被持久化 @Id注解让你指示持久化类的唯一性标识属性 实际上 你可以持久化字段(注解成员变量)或者持久化属性(通过注释getter方法 在这篇文章的剩余部分 我们将用基于属性的注解 关于基于注解的持久化一个好处是他的缺省行为 例如 你不需要声明每一个属性是否要被持久化 任何属性都假定将被持久化除非用@Transient注解了他 对代码来说这是简单的 并且相对于旧的XML配置文件来说 也节省了很多打字量 生成主键    Hibernate一个擅长的功能是主键自动生成 Hibernate/EJB 注解也为主键自动生成提供了丰富的支持 允许诸多生成策略 下面例子演示了最常见的用途 这里Hibernate 根据数据库给出一个合适的主键生成策略

  @Id    @GeneratedValue (strategy=GenerationType AUTO)    public Long getId()         return id;

自定义表和字段映射    默认情况下 Hibernate将映射持久化类到表 用匹配的字段名映射 例如 上面的类将经由下列SQL语句映射到表:

  CREATE TABLE MODELPLANE (    ID long NAME varchar)

  如果你自己生成和维护数据库的话非常好 并且使你的代码易于维护 然而 他不适合所有需求 有些程序需要访问外部数据库 并且可能需要公司数据库命名转换 如果需要的话 你可以使用@Table和@Column注解进行你的持久化映射:

  @Entity@Table(name= T_MODEL_PLANE )public class ModelPlane     private Long id;    private String name;        @Id    @Column(name= PLANE_ID )    public Long getId()         return id;        public void setId(Long id)         this id = id;        @Column(name= PLANE_NAME )     public String getName()         return name;        public void setName(String name)         this name = name;

  它将映射到下面的表

  CREATE TABLE T_MODEL_PLANE (    PLANE_ID long PLANE_NAME varchar)

  你可以利用Table和Column属性自定义映射 它可让你指定诸如列长度 not null约束等等 hibernate支持大量的属性注解:

       @Column(name= PLANE_ID length= nullable=true)    public String getName()         return name;…

映射关系    Java持久化映射中一个最重要 最复杂的部分是确定怎么映射表间的关系 如其他的特性一样 Hibernate在这方面也提供了大量的灵活性 但是以增加了某种复杂度为代价的 我们将浏览一系列共同的用例以对如何使用注解有个大体认识 最常用的一个关系是many to one关系 假定在上面的例子中 每个ModelPlane经由many to one关系被关联到一个PlaneType (换句话说每个Model plane 被确切的关联到一个 plane type 通过给定一个plane type可以被关联到多个 model plane ) 你可以映射如下:

  @ManyToOne( cascade = CascadeType PERSIST CascadeType MERGE )    public PlaneType getPlaneType()                     return planeType;          

  这个CascadeType值表示Hibernate将怎么进行级联操作    另外一个常用的关系是与上面相对的:one to many关系 也以集合而闻名 集合将映射变得有些复杂 在旧的和新的注解中 并且我们将撇开表面细节直接给你完成的例子以给你一个大概 例如在上面例子中 每一个PlaneType对象可能包含一个ModelPlane的集合 可以映射如下:

  @OneToMany(mappedBy= planeType                    cascade=CascadeType ALL                    fetch=FetchType EAGER)    @OrderBy( name )    public List<ModelPlane> getModelPlanes()         return modelPlanes;

  命名查询    Hibernate一个优秀的特征是可以在映射文件申明命名查询的能力 这些查询可以通过名字在代码里调用 这可以让你集中查询且避免有sql或者Hql代码分散在程序里 你也可以通过注解 利用@NameQueries和@NameQuery注解 如下:

  @NamedQueries(            @NamedQuery(    name= planeType findById     query= select p from PlaneType p left join fetch p modelPlanes where id=:id   )   @NamedQuery(    name= planeType findAll     query= select p from PlaneType p   )   @NamedQuery(          name= planeType delete           query= delete from PlaneType where id=:id         )   )

cha138/Article/program/Java/ky/201311/28382

相关参考

知识大全 Groovy编程—Annotations的使用

Groovy编程—Annotations的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  从

知识大全 用Java Annotations管理对象生命周期

用JavaAnnotations管理对象生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘要

知识大全 Hibernate中重要对象[3]

Hibernate中重要对象[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ()Sessi

知识大全 Hibernate的批量处理[3]

Hibernate的批量处理[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  设置hiber

知识大全 Hibernate 3注释简介

开源技术:Hibernate3注释简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在过去几年

知识大全 Hibernate 基于JDBC的事务[3]

Hibernate基于JDBC的事务[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Jav

知识大全 Hibernate3的DetachedCriteria支持[3]

Hibernate3的DetachedCriteria支持[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 如何提高Hibernate 3 启动速度

如何提高Hibernate3启动速度  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 在Tomcat下配置Hibernate的开发环境[3]

在Tomcat下配置Hibernate的开发环境[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 JPA和hibernate对删除操作的不同[3]

JPA和hibernate对删除操作的不同[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!