`
have_life
  • 浏览: 151408 次
社区版块
存档分类
最新评论

hibernate annotation [未全验证]

    博客分类:
  • java
 
阅读更多
使用JPA的时候,如果A B两个实体间是一对多,多对一的关系,如果不在@OneToMany里加入mappedBy属性会导致自动生成一个多余的中间表。比如:

@Entity

public class A {

        @OneToMany(mappedBy="a")

        private set<B> bs = new HashSet<B>();

}

@Entity

public class B{

        @ManyToOne

        public A a;

}

=========================================================

1 、 @Entity(name="EntityName")
必须 ,name 为可选 , 对应数据库中一的个表

2 、 @Table(name="",catalog="",schema="")
可选 , 通常和 @Entity 配合使用 , 只能标注在实体的 class 定义处 , 表示实体对应的数据库表的信息
name: 可选 , 表示表的名称 . 默认地 , 表名和实体名称一致 , 只有在不一致的情况下才需要指定表名
catalog: 可选 , 表示 Catalog 名称 , 默认为 Catalog("").
schema: 可选 , 表示 Schema 名称 , 默认为 Schema("").

3 、 @id
必须
@id 定义了映射到数据库表的主键的属性 , 一个实体只能有一个属性被映射为主键 . 置于 getXxxx() 前 .

4 、 @GeneratedValue(strategy=GenerationType,generator="")
可选
strategy: 表示主键生成策略 , 有 AUTO,INDENTITY,SEQUENCE 和 TABLE 4 种 , 分别表示让 ORM 框架自动选择 ,
根据数据库的 Identity 字段生成 , 根据数据库表的 Sequence 字段生成 , 以有根据一个额外的表生成主键 , 默认为 AUTO
generator: 表示主键生成器的名称 , 这个属性通常和 ORM 框架相关 , 例如 ,Hibernate 可以指定 uuid 等主键生成方式 .
示例 :
    @Id
    @GeneratedValues(strategy=StrategyType.SEQUENCE)
    public int getPk() {
       return pk;
    }

5 、 @Basic(fetch =FetchType ,optional=true)
可选
@Basic 表示一个简单的属性到数据库表的字段的映射 , 对于没有任何标注的 getXxxx() 方法 , 默认即为 @Basic
fetch : 表示该属性的读取策略 , 有 EAGER 和 LAZY 两种 , 分别表示主支抓取和延迟加载 , 默认为 EAGER.
optional: 表示该属性是否允许为 null, 默认为 true
示例 :
    @Basic(optional=false)
    public String getAddress() {
       return address;
    }

6 、 @Column
可选
@Column 描述了数据库表中该字段的详细定义 , 这对于根据 JPA 注解生成数据库表结构的工具非常有作用 .
name: 表示数据库表中该字段的名称 , 默认情形属性名称一致
nullable: 表示该字段是否允许为 null, 默认为 true
unique: 表示该字段是否是唯一标识 , 默认为 false
length: 表示该字段的大小 , 仅对 String 类型的字段有效
insertable: 表示在 ORM 框架执行插入操作时 , 该字段是否应出现 INSETRT 语句中 , 默认为 true
updateable: 表示在 ORM 框架执行更新操作时 , 该字段是否应该出现在 UPDATE 语句中 , 默认为 true. 对于一经创建就不可以更改的字段 , 该属性非常有用 , 如对于 birthday 字段 .
columnDefinition: 表示该字段在数据库中的实际类型 . 通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型 , 但是对于 Date 类型仍无法确定数据库中字段类型究竟是 DATE,TIME 还是 TIMESTAMP. 此外 ,String 的默认映射类型为 VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或 TEXT 字段类型 , 该属性非常有用 .
示例 :
    @Column(name="BIRTH",nullable="false",columnDefinition="DATE")
    public String getBithday() {
       return birthday;
    }

7 、 @Transient
可选
@Transient 表示该属性并非一个到数据库表的字段的映射 ,ORM 框架将忽略该属性 .
如果一个属性并非数据库表的字段映射 , 就务必将其标示为 @Transient, 否则 ,ORM 框架默认其注解为 @Basic
示例 :
    // 根据 birth 计算出 age 属性
    @Transient
    public int getAge() {
       return getYear(new Date()) - getYear(birth);
    }

8 、 @ManyToOne(fetch =FetchType ,cascade=CascadeType )
可选
@ManyToOne 表示一个多对一的映射 , 该注解标注的属性通常是数据库表的外键
optional: 是否允许该字段为 null, 该属性应该根据数据库表的外键约束来确定 , 默认为 true
fetch : 表示抓取策略 , 默认为 FetchType .EAGER
cascade: 表示默认的级联操作策略 , 可以指定为 ALL,PERSIST,MERGE,REFRESH 和 REMOVE 中的若干组合 , 默认为无级联操作
targetEntity: 表示该属性关联的实体类型 . 该属性通常不必指定 ,ORM 框架根据属性类型自动判断 targetEntity.
示例 :
    // 订单 Order 和用户 User 是一个 ManyToOne 的关系
    // 在 Order 类中定义
    @ManyToOne()
    @JoinColumn(name="USER")
    public User getUser() {
       return user;
    }

9 、 @JoinColumn
可选
@JoinColumn 和 @Column 类似 , 介量描述的不是一个简单字段 , 而一一个关联字段 , 例如 . 描述一个 @ManyToOne 的字段 .
name: 该字段的名称 . 由于 @JoinColumn 描述的是一个关联字段 , 如 ManyToOne, 则默认的名称由其关联的实体决定 .
例如 , 实体 Order 有一个 user 属性来关联实体 User, 则 Order 的 user 属性为一个外键 ,
其默认的名称为实体 User 的名称 + 下划线 + 实体 User 的主键名称
示例 :
    见 @ManyToOne

10 、 @OneToMany(fetch =FetchType ,cascade=CascadeType)
这样写会只成生成表A和表B,B中会有一个到表A的外键。但是如果不加mappedBy=”a”, 那么就会再生成一张A_B表。


可选
@OneToMany 描述一个一对多的关联 , 该属性应该为集体类型 , 在数据库中并没有实际字段 .
fetch : 表示抓取策略 , 默认为 FetchType .LAZY , 因为关联的多个对象通常不必从数据库预先读取到内存
cascade: 表示级联操作策略 , 对于 OneToMany 类型的关联非常重要 , 通常该实体更新或删除时 , 其关联的实体也应当被更新或删除
例如 : 实体 User 和 Order 是 OneToMany 的关系 , 则实体 User 被删除时 , 其关联的实体 Order 也应该被全部删除
示例 :
    @OneTyMany(cascade=ALL)
    public List getOrders() {
       return orders;
    }

11 、 @OneToOne(fetch =FetchType ,cascade=CascadeType)
可选
@OneToOne 描述一个一对一的关联
fetch : 表示抓取策略 , 默认为 FetchType .LAZY
cascade: 表示级联操作策略
示例 :
    @OneToOne(fetch =FetchType .LAZY )
    public Blog getBlog() {
       return blog;
    }

12 、 @ManyToMany
可选
@ManyToMany 描述一个多对多的关联 . 多对多关联上是两个一对多关联 , 但是在 ManyToMany 描述中 , 中间表是由 ORM 框架自动处理
targetEntity: 表示多对多关联的另一个实体类的全名 , 例如 :package.Book.class
mappedBy: 表示多对多关联的另一个实体类的对应集合属性名称
示例 :
    User 实体表示用户 ,Book 实体表示书籍 , 为了描述用户收藏的书籍 , 可以在 User 和 Book 之间建立 ManyToMany 关联
    @Entity
    public class User {
       private List books;
       @ManyToMany(targetEntity=package.Book.class)
       public List getBooks() {
           return books;
       }
       public void setBooks(List books) {
           this.books=books;
       }
    }
  
    @Entity
    public class Book {
       private List users;
       @ManyToMany(targetEntity=package.Users.class, mappedBy="books")
       public List getUsers() {
           return users;
       }
       public void setUsers(List users) {
           this.users=users;
       }
    }
两个实体间相互关联的属性必须标记为 @ManyToMany, 并相互指定 targetEntity 属性 ,
需要注意的是 , 有且只有一个实体的 @ManyToMany 注解需要指定 mappedBy 属性

13、@TransactionAttribute
事务管理服务
最有用的容器服务可能就是事务管理服务,当应用出现失败或异常时,它保证了数据库的完整性。你可以简单地将为一个 POJO 方法申明它的事务属性。这样容器就可以在合适的上下文中运行这个方法。最常见的事务是定义在 session bean 的方法上,方法中所有的数据库操作只有在方法正常退出时才会提交,如果方法抛出未捕获的异常,事务管理将回滚所有的变更。

@TransactionAttribute 注释用作定义一个需要事务的方法。例如:

@TransactionAttribute (TransactionAttributeType.REQUIRED)

public void insertProduct(String name, Float price, boolean error) {

        …

        …

}

它可以有以下参数:

a.         REQUIRED : 方法在一个事务中执行,如果调用的方法已经在一个事务中,则使用该事务,否则将创建一个新的事务。

b.         MANDATORY : 方法必须在一个事务中执行,也就是说调用的方法必须已经有一个事务,否则新抛出一个错误( ERROR )。

c.         REQUIRESNEW : 方法将在一个新的事务中执行,如果调用的方法已经在一个事务中,则暂停旧的事务。

d.         SUPPORTS : 如果方法在一个事务中被调用,则使用该事务,否则不使用事务。

e.         NOT_SUPPORTED :如果方法在一个事务中被调用,将抛出一个错误( ERROR )

如果没有指定参数, @TransactionAttribute 注释使用 REQUIRED 作为默认参数。

14、@ PersistenceContextType

PersistenceContextType.EXTENDED。在默认情况下,EntityManagers用TRANSACTION的 PersistenceContextType来创建。这样做也就表示,只有当有活动的事务处理在进行时,实体才是可托管的。事务处理一结束,实体就与实 体管理程序脱离,这样我们就可以丢弃它。EXTENDED上下文类型表示这种脱离不会发生,即使在事务处理结束后实体仍然是可托管的。这就意味着你不需要 担心集合是否被暂缓取回,因为实体管理程序可以用来完成所需要的取回操作。当我们想要保持和更新/合并实体,或者从数据库里删除实体的时候,我们仍然需要 获得EntityTransaction,例如我们想要保存一个新的Application实体:

public void saveApplication(Application a) {
   EntityTransaction tx=em.getTransaction();
   tx.begin();
   em.persist(a);
   tx.commit();
}

(转)原文地址: http://blog.csdn.net/pla37401/archive/2010/04/01/5440596.aspx
分享到:
评论

相关推荐

    hibernate annotation 中文文档

    ### Hibernate Annotation 中文文档知识点概览 #### 一、创建注解项目 ##### 1.1 系统需求 在创建一个使用 Hibernate 注解的项目之前,需要满足一定的系统环境需求,例如支持 Java 的开发环境、JDK 版本、支持 ...

    hibernate annotation jar

    【标题】:“Hibernate Annotation JAR” 【描述】:“Hibernate 3.3 Annotation JAR”指的是Hibernate框架的一个特定版本,即3.3版本中用于对象关系映射(ORM)的注解库。Hibernate是一个广泛使用的Java库,它允许...

    hibernate annotation 3.40

    - **更好的工具支持**:大多数IDE都对Hibernate Annotation提供了很好的支持,如代码提示、自动完成和验证等。 5. **注意事项** - 虽然注解简化了配置,但并不意味着它可以完全替代XML。在某些复杂场景下,例如...

    hibernate_annotation_中文帮助文档

    总的来说,《Hibernate Annotations中文帮助文档》是学习和掌握Hibernate ORM框架的宝贵资源,它详细阐述了如何利用注解进行对象关系映射,以及进行数据验证和全文检索,是Java开发人员必备的参考资料。

    springmvc + hibernate annotation 配置

    在本篇文章中,我们将详细探讨如何将Spring MVC与Hibernate结合,并利用注解(Annotation)进行配置。 首先,让我们了解这两个框架的基本概念。Spring MVC是Spring框架的一部分,它是一个用于构建Web应用的模型-...

    hibernate annotation帮助文档

    ### Hibernate Annotation 帮助文档知识点总结 #### 1. 创建注解项目 - **系统需求**:在开始创建一个支持 Hibernate 注解的项目之前,需要确保满足以下系统需求: - Java 开发环境(例如 JDK 1.8 或更高版本)。...

    spring加入hibernate annotation方式.zip

    7. **测试**:编写JUnit测试类,验证Service层的功能,确保Spring和Hibernate的整合工作正常。 通过这种方式,Spring和Hibernate的整合使我们能够方便地管理数据库操作,同时利用Spring的强大功能处理业务逻辑。...

    hibernate annotation

    在Hibernate中,注解(Annotation)是用于替代传统XML配置的一种方式,使得对象模型与数据库表的映射关系更加直观和简洁。本文将深入探讨Hibernate注解的相关知识点,并通过实例来阐述其用法。 ### 1. Hibernate...

    Hibernate Annotation Reference

    标题:Hibernate Annotation Reference 描述:本文件为Hibernate注解的详尽参考指南,全面解析了如何在项目中利用Hibernate框架的注解功能进行实体映射、查询定义以及数据验证等高级操作。 ### 一、设置注解项目 ...

    Hibernate annotation

    【Hibernate验证器】`Hibernate Validator`是Hibernate提供的一个验证框架,它允许在实体Bean上添加如`@NotNull`,`@Size`等验证规则,确保数据的正确性。 【与XML的结合】尽管注解提供了便利,但有时仍需要通过XML...

    hibernate _annotation 注解编程

    ### Hibernate Annotation注解编程知识点详解 #### 一、概述与设置环境 - **概述**:Hibernate 是一个流行的 Java 持久层框架,它提供了一种面向对象的方式来处理数据库操作。Hibernate 支持多种元数据定义方式,...

    hibernate-validator-annotation-processor-5.1.0.CR1.zip

    1. Hibernate Validator Annotation Processor 5.1.0.CR1是用于处理Bean Validation注解的工具,帮助开发者在编译阶段进行验证,提高应用的质量和稳定性。 2. "generate-default-impl-maven-plugin"是一个Maven插件...

    struts2 hibernate3 spring2.5 annotation 整合

    这里主要讨论的是如何将这三者结合,并利用注解(Annotation)进行配置,以简化开发过程。 Struts2是MVC(模型-视图-控制器)框架,主要负责处理HTTP请求和控制应用的流程。它通过Action类处理业务逻辑,使用拦截器...

    struts2 spring2.5 hibernate3.0 annotation 整合

    本项目整合了这三个框架,并利用注解(Annotation)进行配置,简化了传统XML配置的方式。 Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于控制应用程序的流程,处理HTTP请求并分发到...

    hibernate-validator-annotation-processor-4.3.1.final-sources.jar.zip

    这个压缩包“hibernate-validator-annotation-processor-4.3.1.final-sources.jar.zip”包含了Hibernate Validator注解处理器的源代码,版本号为4.3.1.Final,是理解其内部工作原理和自定义验证规则的重要资源。...

    第一个Hibernate with Annotation程式(转)

    9. **测试**:使用JUnit进行单元测试,验证Hibernate操作的正确性,如测试数据的插入、查询、更新和删除。 10. **最佳实践**:在实际项目中,应考虑使用SessionFactory的缓存策略、二级缓存配置,以及优化查询性能...

    annotation hibernate struts spring springsecurity API中英文均有

    标题中的"annotation hibernate struts spring springsecurity"涵盖了四个关键的Java开发框架和技术:注解(Annotation)、Hibernate、Struts和Spring Security。这些是构建现代Java企业级应用的基础组件。 **注解...

    Struts+Hibernate(annotation)实现记事本功能

    在这个特定的案例中,"Struts+Hibernate(annotation)"的组合被用来实现一个记事本功能,这涉及到前端交互、后端数据处理以及持久化层的设计。 Struts是一个基于MVC(Model-View-Controller)设计模式的开源框架,...

    hibernate annotaion api 中文与英文版

    在Hibernate中,注解(Annotation)API是一种声明式的方法,用于定义对象-关系映射(ORM)。让我们深入探讨一下Hibernate Annotation API及其相关的知识点。 **1. Hibernate 注解概述** 在传统的Hibernate配置中,...

Global site tag (gtag.js) - Google Analytics