`
文艺的程序猿
  • 浏览: 102444 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Hibernate -- 注解(Annotation)关系映射

阅读更多
1. 使用Hibernate Annotation来做对象关系映射
1) 添加必须包:
    hibernate-jpa-2.0-api-1.0.0.Final.jar
2) 在实体类中添加JPA的标准注解来进行对象关系映射.注解可以添加在属性上,也可以添加在getXxx()方法之上。
    a) @Entity 映射一个实体类
       @Table 指定关联的表
    b) @Id 映射OID
    c) @GeneratedValue 指定OID的生成策略
    d) @Version 映射版本号属性
    e) @Column 指定属性对应的列的信息
    f) @Temporal 指定日期时间的类型(TIMESTAMP,DATE,TIME)
    g) 简单属性可以不用注解。默认就是@Basic
    h) @Transient 指定属性不需要映射
    i) 复杂属性:关联,继承,组件,联合主键,集合
   
3) 在Hibernate全局配置文件中使用声明映射类的方式:
    <mapping class="实体类的全限定名"/>
   
4) 使用Annotation来映射对象关系时,加载Hibernate全局配置要使用AnnotationConfiguration类
5) 持久化操作与之前没有区别。

2. Hibernate Annotation 基本映射
 
3. 映射多对一
  1) @ManyToOne
  2) 指定关联列@JoinColumn(name="xxx_id")
 
4. 映射一对多
  1) @OneToMany  默认会使用连接表做一对多的关联
  2) 添加@JoinColumn(name="xxx_id")后,就会使用外键关联,而不使用连接表了。

5. 映射双向一对多
  1) 在多端:
     @ManyToOne
  2) 在一端:
     @OneToMany(mappedBy="多端的关联属性名"):----升级后-->  @OneToMany
     @JoinColumn(name="外键名")
    
6. 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规范中的所有持久化方法。
  
7. mappedBy属性:用在双向关联中,把关系的维护权反转
       跟hibernate XML映射中的property-ref一样。
 
8. cascade属性和mappedBy用在一起时,一定要通过调用双方的set方法来建立关系。


10. 双向一对一
  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;

11. 双向多对多
  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>();
12. 把双向多对多拆成两个一对多: 1-->*<--1

13. 继承映射:
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;
...
}
在子类中跟普通实体类的映射相同

14. 组件映射
  在组件类中用@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"))
})

15. 联合主键映射
  1. 主键类:用@Emabbedable映射。并实现Serializable接口,使用主键属性重写hashCode()和equals()方法。
  2. 使用这个主键类的类中。用@Id映射。
分享到:
评论

相关推荐

    hibernate-annotation

    而Hibernate注解则是其在ORM(对象关系映射)领域的进一步进化,它允许开发者将元数据直接嵌入到Java类和属性的声明中,从而避免了XML配置文件的繁琐。本篇将详细阐述Hibernate注解的相关知识。 一、Hibernate注解...

    hibernate-distribution 3.3.2+annotation3.4.0+slf4j-1.5.8.rar )

    2. **对象关系映射**:Hibernate通过XML映射文件或注解来描述Java类与数据库表之间的映射关系,实现了数据的透明访问。3.3.2版本中,注解支持更为成熟,使得代码更简洁。 3. **查询语言HQL**:Hibernate Query ...

    hibernate-annotation-helloword

    **hibernate-annotation-helloworld** 是一个基于Hibernate框架,使用注解方式实现的Hello World示例项目。在Java世界中,Hibernate是一个流行的持久层框架,它极大地简化了数据库操作,尤其是在对象关系映射(ORM)...

    hibernate-Annotation.jar

    在Hibernate 3.x版本中,引入了Annotation注解,这是一种元数据的方式,可以替代XML配置文件来描述对象与数据库表之间的映射关系。 **Hibernate Annotation注解** 在Hibernate 3.x之前,对象到数据库的映射通常...

    hibernate-annotations 相关jar包

    在Hibernate中,Hibernate Annotations是一个重要的组成部分,它引入了JPA(Java Persistence API)的注解,使得对象-关系映射更加简洁且无需XML配置。 **一、Hibernate Annotations简介** Hibernate Annotations是...

    Hibernate-Annotation-3.4.0帮助文档

    Hibernate注解是一种元数据方式,允许开发者直接在Java类和属性上声明数据库相关的元信息。这包括实体类、字段、关联等的定义,使得数据库模型与Java对象模型之间的映射更加紧密。 **2. 主要注解** - `@Entity`: ...

    hibernate-annotation3.4.0 + hibernate-distribution3.3.2 + slf4j-1.5.8.rar

    该版本支持JPA(Java Persistence API),提供了对象-关系映射(ORM)的能力,使得开发者可以使用面向对象的方式处理数据库事务,而无需编写大量SQL语句。3.3.2版本相对于更早期的版本,增加了对Java 5和6的支持,...

    hibernate-annotation 所需要的jar包

    Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来处理数据库操作。在Java开发中,Hibernate与Annotation的结合使用极大地简化了数据持久化的复杂性,使得开发人员无需编写大量...

    hibernate annotations3.4.0 GA.rar

    现在已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的映射方式将代替hibernate 的*....

    hibernate-annotations-3.4.0.GA.rar

    Hibernate注解是基于Java 5引入的元数据机制,允许在源代码中嵌入元数据信息,用于描述对象如何映射到数据库。例如,`@Entity`注解表示一个类作为数据库中的表,`@Table`定义表名,`@Id`标记主键字段。 2. **实体...

    Hibernate Annotation jar

    现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的...

    Hibernate-Annotation中文教程.pdf

    借助新的 Hibernate Annotation 库,即可一次性地分配所有旧映射文件,一切都会按照您的想法来定义——注释直接嵌入到您的 Java 类中,并提供一种强大及灵活的方法来声明持久性映射。 Hibernate Annotation 的优点...

    Hibernate-Annotation初步.rar

    使用Hibernate注解,我们可以直接在实体类上声明如@Entity、@Table、@Id等注解,来标识这个类是一个数据库表的映射,它的主键是什么,以及属性如何映射到表的列。例如: ```java @Entity @Table(name = "User") ...

    Hibernate-Annotation中文教程.docx

    借助新的 Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的 Java 类中,并提供一种强大及灵活的方法来声明持久性映射。 使用 Hibernate 注解的优点...

    Hibernate -annotation 学习笔记

    Annotation是Hibernate提供的一种元数据方式,允许在Java类和字段上直接添加注解,以声明对象与数据库表之间的映射关系,从而替代传统的XML配置文件。 ### 第 1 课 课程内容 学习Hibernate Annotation,首先要理解...

    hibernate-annotation-3.4.0.GA

    《深入理解Hibernate注解3.4.0.GA》 Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。在3.4.0.GA版本中,Hibernate引入了注解支持,使得开发人员能够更方便地在类和属性上直接...

    hibernate-release-4.2.12.Final libs

    - Annotation:元数据注解,用于标记实体类和属性,定义映射关系。 4. 应用场景与实践: - 数据库操作:通过Entity定义实体类,使用Annotation指定数据库表和字段映射,通过EntityManager实现CRUD操作。 - 查询...

    Hibernate one-to-many-annotation

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来处理数据库操作。在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相...

Global site tag (gtag.js) - Google Analytics