`
JavaCrazyer
  • 浏览: 3008899 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Hibernate温习(12)--基于注解方式的各种映射全面总结

阅读更多

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映射。

    

分享到:
评论
2 楼 scwuwei 2014-01-07  
good
1 楼 dddquk 2012-12-01  
 

相关推荐

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...

    hibernate-commons-annotations-5.0.1.Final.jar

    总结,`hibernate-commons-annotations-5.0.1.Final.jar`是Hibernate框架的重要组成部分,通过提供丰富的元数据注解,简化了Java对象与数据库之间的映射工作。对它的源码进行深入学习,不仅能够增强对JPA和Hibernate...

    HIBERNATE:Hibernate 学习一--注解方式自动建表

    这篇博客"Hibernate学习一--注解方式自动建表"主要探讨了如何使用Hibernate的注解来实现数据库表的自动化创建。 在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被...

    ssh-base-framework----基于全注解方式的SSH基础框架

    基于struts2.23 + spring2.5.6 + hibernate3.6.4 + hibernate-generic-dao1.0(除了spring,整合的都是最新的GA包,hibernate-generic-dao是google code项目库中一个开源的basedao)

    Hibernate one-to-many / many-to-one关系映射

    在Java的持久化框架Hibernate中,关系映射是数据库对象之间的关联方式,它允许我们将复杂的数据库结构映射到Java对象上。"Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联...

    hibernate-release-5.0.7.Final的所有jar包

    6. **hibernate-commons-annotations**: 提供了通用的注解处理,与JPA的注解配合使用,简化了元数据的定义。 7. **dom4j**和**xml-apis**: 支持XML处理的库,Hibernate在处理映射文件时会用到。 8. **jta**: Java ...

    hibernate-common-annotations.jar

    总结,"hibernate-common-annotations.jar"在Hibernate框架中扮演着至关重要的角色,它是实现注解驱动的ORM开发的关键。通过理解和熟练运用其中的注解,开发者能够更高效、更灵活地进行数据持久化,提升Java应用的...

    hibernate-release-5.0.7.Final.zip

    - Object-Relational Mapping:通过XML或注解方式定义实体类和数据库表之间的映射关系,实现对象与数据的自动转换。 3. Hibernate 5.0.7.Final新特性 - 支持JSR-349 Bean Validation 1.1:增强了实体验证功能,...

    hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip

    总之,"hibernatetools-Update-4.1.1.Final_2013-12-08_01-06-33-B605.zip"是一个强大的Eclipse插件,它为Java开发者提供了全面的Hibernate支持,使数据库操作和管理变得轻松高效。无论是新手还是经验丰富的开发者,...

    hibernate-annotations-3.4.0.GA

    而Hibernate Annotations是Hibernate框架的一个重要组成部分,它引入了基于注解的元数据,使得代码更加简洁、易读。本篇将详细探讨Hibernate Annotations 3.4.0.GA版本中的核心概念、特性以及实际应用。 一、...

    hibernate-release-5.0.0.Final(1).zip

    本次我们将深入探讨的版本是`hibernate-release-5.0.0.Final(1)`,这个版本在Hibernate的生命周期中具有重要的地位,它引入了多项新特性和改进,旨在提升开发效率和性能。 一、Hibernate概述 Hibernate是Java领域中...

    hibernate-release-4.3.1.Final.zip

    标题中的"hibernate-release-4.3.1.Final.zip"表明这是一个关于Hibernate ORM框架的版本4.3.1的发布包。Hibernate是Java开发中广泛使用的对象关系映射(ORM)工具,它允许开发者用面向对象的方式来操作数据库,从而...

    最新 hibernate-release-4.2.13.Final.tgz

    "hibernate-release-4.2.13.Final.tgz"是一个全面的Hibernate学习资源,不仅提供了运行环境所需的jar包,还包含了丰富的实践示例和详尽的文档。无论你是初学者还是经验丰富的开发者,都可以从中受益,进一步提升在...

    hibernate-extensions-2.1.3.zip ,middlegen for hibernate

    Middlegen,作为`Middlegen-Hibernate-r5.zip`的主要内容,是针对Hibernate的一个实用工具,用于自动生成数据库模式到Java类的映射代码,极大地提高了开发效率。 1. Hibernate扩展: Hibernate扩展是开发者社区为...

    hibernate-release-4.2.4核心jar包

    `hibernate-commons-annotations-4.0.2.Final.jar`包含了一些通用的Hibernate注解,这些注解用于标注Java类和字段,指示它们在Hibernate中的角色,如@Entity、@Table、@Column等,使得ORM过程更加简洁和直观。...

    hibernate-release-5.0.7 全包

    7. **hibernate-commons-annotations-5.0.1.Final.jar**:包含了一些常见的Hibernate注解,如@Entity、@Table、@Column等,用于标注实体类和属性,定义数据库表和字段的映射关系。 8. **jboss-logging-3.3.0.Final....

    hibernate-release-4.2.4.Final.zip

    Hibernate使用注解或XML文件来完成映射,使得Java对象可以直接持久化到数据库。 8. **HQL(Hibernate Query Language)**: Hibernate 提供了自己的查询语言HQL,它是面向对象的,与SQL类似但更接近Java,可以方便...

    hibernate-release-4.3.10.Final.zip

    总结,`hibernate-release-4.3.10.Final`版本是Hibernate框架的一个重要里程碑,其提供的强大功能和优化特性使得Java开发者在处理数据库操作时更加得心应手。理解和掌握Hibernate,能有效提升开发效率,降低系统维护...

    hibernate-distribution-3.3.2.GA-dist

    首先,"hibernate-distribution-3.3.2.GA-dist" 是Hibernate 3.3.2.GA版本的完整发布包,它包含了该版本的所有必需组件。这个压缩包中不仅有运行时所需的jar文件,还包含了详细的API文档——javadoc,这对于开发者...

    Hibernate 离线的配置方法(hibernate-mapping-3.0.dtd)

    因为Hibernate在读出hbm.xml文件时需要通过网络读取到hibernate-mapping-3.0.dtd 文件。 如果没有网络不能正常工作。 所以提供上述文件。 以及hibernate-mapping-3.0.dtd,hibernate-configuration-3.0.dtd提供下载...

Global site tag (gtag.js) - Google Analytics