`

Hibernate 映射关系注解 属性详解

 
阅读更多

1.标准注解

    a) @Entity 映射一个实体类

       @Table 指定关联的表

 

    b) @Id 映射OID

 

    c) @GeneratedValue 指定OID的生成策略

 

          @GeneratedValue的属性strategy指定生成策略,

 

         IDENTITY(自增长方式,如mysql)

 

         SEQUENCE  (序列方式,如oracle)

 

        TABLE (表方式,该方式便于数据库移植,但效率不高,主键的值是从这个表中取得的。)

 

        AUTO (自动方式,该方式会把主键生成交给JPA的实现者来决定,Hibernate会根据底层数据库选择合适的方    式,如果用这种方式,可以不写,默认如此)

 

       例如:@GenericGenerator(name="uuid_s",strategy="uuid")

 

    d) @Version 映射版本号属性

 

    e) @Column 指定属性对应的列的信息

 

    f) @Temporal 指定日期时间的类型(TIMESTAMP,DATE,TIME)

 

    g) 简单属性可以不用注解。默认就是@Basic

 

    h) @Transient 指定属性不需要映射

 

    i) 复杂属性:关联,继承,组件,联合主键,集合

 

2. 映射多对一

 

  1) @ManyToOne

 

  2) 指定关联列@JoinColumn(name="xxx_id")

 

  

 

3. 映射一对多

 

  1) @OneToMany  默认会使用连接表做一对多的关联

 

  2) 添加@JoinColumn(name="xxx_id")后,就会使用外键关联,而不使用连接表了。

 

 

 

4. 映射双向一对多

 

  1) 在多端: 

 

     @ManyToOne

 

  2) 在一端:

 

     @OneToMany(mappedBy="多端的关联属性名"):----升级后-->  @OneToMany

 

     @JoinColumn(name="外键名")

 

5. cascade属性: 指定级联操作的行为(可多选)

 

   CascadeType.PERSIST :调用JPA规范中的persist(),不适用于Hibernate的save()方法

 

   CascadeType.MERGE:调用JPA规范中merge()时,不适用于Hibernate的update()方法

 

   CascadeType.REMOVE:调用JPA规范中的remove()时,适用于Hibernate的delete()方法

 

   CascadeType.REFRESH:调用JPA规范中的refresh()时,适用于Hibernate的flush()方法

 

   CascadeType.ALL:JPA规范中的所有持久化方法。

 

   

 

6. mappedBy属性:用在双向关联中,把关系的维护权反转

 

       跟hibernate XML映射中的property-ref一样。

 

7. cascade属性和mappedBy用在一起时,一定要通过调用双方的set方法来建立关系。

 

 

 

 

 

8. 双向一对一

 

  1) 基于外键

 

    a) 在主控方:@OneToOne

 

    b) 在被控方:@OneToOne(mappedBy="对方的关联属性名")

 

    

 

  2) 基于主键: JPA标准中没有提供共享主键生成问题的标准方法,使用Hibernate的扩展

 

    a) 在主控方:Car

 

       @Id

 

    @GeneratedValue(generator="my-uuid")

 

    @GenericGenerator(name="my-uuid", strategy="uuid")

 

    private String id;

 

    

 

    @OneToOne(cascade={CascadeType.ALL})

 

    @PrimaryKeyJoinColumn

 

    private Brand brand;

 

 

 

 b) 在被控方:Brand

 

    @Id

 

    @GeneratedValue(generator="myFG")

 

    @GenericGenerator(name="myFG", strategy="foreign",parameters=@Parameter(name="property",value="car"))

 

    private String id;

 

    

 

    @OneToOne(mappedBy="brand")

 

    private Car car;

 

 

 

9. 双向多对多

 

  1. 在主控方:

 

    //从学生到课程的多对多: 最好由某一端来维护这个关系会更有效率

 

 @ManyToMany

 

 @JoinTable(name="student_course", 

 

   joinColumns={@JoinColumn(name="student_id")},

 

   inverseJoinColumns={@JoinColumn(name="course_id")})

 

 private Set<Course> courseSet = new HashSet<Course>();

 

 

 

  2. 在被控方:

 

    //课程到学生的多对多

 

 @ManyToMany(mappedBy="courseSet")

 

 private Set<Student> stus = new HashSet<Student>();

 

 

 

10. 把双向多对多拆成两个一对多: 1-->*<--1

 

 

 

11. 继承映射:

 

 1. 整个继承树一张表

 

 在父类中添加从下注解

 

@Entity

 

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

 

@DiscriminatorColumn(name="type",length=3)

 

@DiscriminatorValue("u")

 

 

 

 子类中添加以下注解

 

@Entity

 

@DiscriminatorValue("w")

 

 

 

2. 每个子类一张表

 

在父类添加如下注解

 

@Entity

 

@Table(name="user")

 

@Inheritance(strategy=InheritanceType.JOINED)

 

在子类中跟普通实体类的映射相同

 

 

 

3. 每个具体类一张表

 

在父类中

 

@Entity

 

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

 

public class User {

 

 @Id

 

 @GeneratedValue(strategy=GenerationType.TABLE,generator="xxGen")

 

 @TableGenerator(name="xxGen",allocationSize=1)

 

 private Long id;

 

... 

 

}

 

在子类中跟普通实体类的映射相同

 

 

 

12. 组件映射

 

  在组件类中用@Emabbedable

 

 在使用这个组件类中用

 

 @Emabbed

 

 @AttributeOverrides({

 

   @AttributeOverride(name="email", column=@Column(name="p_email")),

 

   @AttributeOverride(name="address", column=@Column(name="p_address")),

 

   @AttributeOverride(name="mobile", column=@Column(name="p_mobile"))

 

 })

 

 

 

13. 联合主键映射

 

  1. 主键类:用@Emabbedable映射。并实现Serializable接口,使用主键属性重写hashCode()和equals()方法。

 

  2. 使用这个主键类的类中。用@Id映射。

分享到:
评论

相关推荐

    hibernate注解详解

    在Hibernate中,注解是用于替代传统的XML配置文件,以元数据的形式标注在类、属性或者方法上,实现对象与数据库表之间的映射。本文将深入探讨Hibernate中的注解,帮助你更好地理解和应用它们。 1. **实体注解(@...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解,涉及的是JavaEE开发中常见的SSH框架(Struts2、Spring、Hibernate)的整合,尤其强调了注解在开发中的应用,旨在简化配置,提高开发效率。SSH框架的组合在...

    hibernate注解详解说明

    在 Hibernate 中,注解是一种简洁且强大的工具,用于替代传统的 XML 配置文件来描述对象模型和数据库之间的映射关系。这篇文档将深入探讨 Hibernate 注解的使用。 ### 第 1 章 创建一个注解项目 在开始使用 ...

    hibernate注解配置详解

    ### Hibernate注解配置详解 #### 一、概述 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程。在Hibernate中,通过使用注解来定义实体类与数据库表之间的映射关系,...

    Hibernate各种表关系映射配置详解

    在Hibernate中,我们通常通过在一方的类中添加`@OneToOne`注解,并指定`mappedBy`属性来映射到另一方的主键。例如,Person类的配置可能是这样的: ```java @Entity public class Person { @Id private int id; ...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(含JAR包)

    Hibernate3.3.1是流行的Java对象关系映射(Object-Relational Mapping,ORM)工具,它允许开发者用Java对象来操作数据库。在3.3.1版本中,注解支持已经相当成熟,`@Entity`定义实体类,`@Table`对应数据库表,`@Id`...

    hibernate 4 注解详解

    6. **@Column**: 这个注解定义了实体类的属性如何映射到数据库表的列。它包括了列名、唯一性、是否允许为空、是否允许插入和更新等属性。例如,`@Column(name = "PERSONNAME", unique = true, nullable = false, ...

    Hibernate注解、注释大全

    《Hibernate注解详解》 Hibernate 是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作。在Hibernate中,注解是用于描述Java类及其属性如何映射到数据库表的重要工具。本文将全面解析Hibernate中的...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)

    【SSH2框架详解】SSH2框架,即Struts2、Spring和Hibernate的组合,是JavaEE企业级开发中广泛使用的框架。在这个全注解实例中,我们将深入理解如何利用Struts2.1.6、Spring2.5.6和Hibernate3.3.1构建应用程序,避免...

    Hibernate对象关系详解

    在Hibernate的XML映射文件中,集合类型的关联关系经常使用`&lt;set&gt;`标签,如`&lt;set&gt;`下的`name`属性指定集合属性名,`table`属性指定中间表(多对多关系时),`inverse`属性表示维护关系的责任方,`cascade`属性控制...

    Hibernate全部注解

    ### Hibernate 全部注解详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM) 框架,允许开发人员将 Java 应用程序中的对象映射到数据库表,反之亦然。使用 Hibernate 可以极大地简化数据库访问代码的...

    Hibernate注解详解(超全面不解释).pdf

    在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。本文将详细解析Hibernate中的注解使用,帮助理解如何通过注解简化数据库操作。 首先,实体Bean是...

    关于struts2和hibernate的部分注解解释

    #### Hibernate实体类注解详解 1. **类级别注解** - **@Entity**:此注解用于标记实体类,表示它将映射到数据库中的某个表。 - **name**:可选参数,用于指定实体类映射的表名。如果不设置,默认情况下表名与实体...

    hibernate _annotation 注解编程

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

    Hibernate 3 注解技术讲解

    **Hibernate 3 注解技术详解** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它极大地简化了数据库操作。 Hibernate 3引入了注解支持,使得开发人员无需XML配置文件即可进行对象持久化,提高了...

    用Hibernate映射继承关系

    本主题聚焦于“用Hibernate映射继承关系”,我们将深入探讨Hibernate如何处理对象的继承层次结构,并将其映射到数据库中的表。 Hibernate支持多种继承策略,包括单一表继承(Single Table Inheritance)、联合表...

    Hibernate映射配置详解

    在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者将数据库操作转换为对Java对象的操作,极大地简化了数据库编程。SSH是Spring、Struts和Hibernate三个开源框架的简称,常被用于构建...

    Hibernate注解详解.pdf

    ### Hibernate注解详解 #### 一、实体Bean与基本注解 **实体Bean**是Hibernate框架中的核心概念之一,指的是那些被持久化的Java对象。在Hibernate中,通过使用`@Entity`注解来标记某个Java类,使其成为实体Bean。 ...

Global site tag (gtag.js) - Google Analytics