`
longgangbai
  • 浏览: 7332360 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate3的注解映射学习

阅读更多

注解映射必须满足两大条件:Hibernate3.2以上版本和JSEE 5。
@Entity 类注释,所有要持久化的类都要有

  1. @Entity  
  2. public class Org  implements java.io.Serializable {   
  3. }  

@Id 主键      
  1. @Id  
  2.      @GeneratedValue  
  3.      private String orgId;   
  4.      private String orgName;  
@Column(name="...") 该属性对应表中的字段是什么,没有name表示一样
@Table 对象与表映射
@UniqueConstraint 唯一约束
@Version 方法和字段级,乐观锁用法,返回数字和timestamp,数字为首选
@Transient 暂态属性,表示不需要处理
@Basic 最基本的注释。有两个属性:fetch是否延迟加载,optional是否允许null
@Enumerated 枚举类型
@Temporal 日期转换。默认转换Timestamp
@Lob 通常与@Basic同时使用,提高访问速度。
@Embeddable 类级,表可嵌入的
@Embedded 方法字段级,表被嵌入的对象和@Embeddable一起使用
@AttributeOverrides 属性重写
@AttributeOverride 属性重写的内容和@AttributeOverrides一起嵌套使用
@SecondaryTables 多个表格映射
@SecondaryTable 定义辅助表格映射和@SecondaryTables一起嵌套使用
@GeneratedValue 标识符生成策略,默认Auto

表与表关系映射
@OneToOne:一对一映射。它包含五个属性:
targetEntity:关联的目标类
Cascade:持久化时的级联操作,默认没有
fetch:获取对象的方式,默认EAGER
Optional:目标对象是否允许为null,默认允许
mappedBy:定义双向关联中的从属类。
单向:
    @JoinColumn:定义外键(主表会多一字段,做外键)

@OneToMany:一对多映射;@ManyToOne:多对一映射
单向一对多:
    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="book_oid")/**book:表;oid:book表的主键;无name会按此规则自动生成*/
单向多对一:
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="author_oid")
关联表格一对多:
    @OneToMany(cascade=CascadeType.ALL)
    @JoinTable(joinColumn={@JoinColumn(name="BOOK_OBJECT_OID")},inverseJoinColumns={@JoinColumn(name="AUTHER_OBJECT_OID")})
双向一对多或多对一:
    不需要多一张表,只是使用mappedBy:使用在One一方,值为One方类名表示Many的从属类。
@Entity  
@Entity
public class Org  implements java.io.Serializable {


    // Fields    
	@Id
	@GeneratedValue
     private String orgId;
     private String orgName;
     @OneToMany(mappedBy = "org")
     private List<Department> departments;

    // Constructors
...
    // Property accessors
...
}

@Entity
public class Department  implements java.io.Serializable {


    // Fields   
@Id
@GeneratedValue
     private String id;
     private String name;
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="org_orgId")
     private Org org;
     @OneToMany(mappedBy = "department")
     private List<Employee> employees;

    // Constructors

    public List<Employee> getEmployees() {
return employees;
}

public void setEmployees(List<Employee> employees) {
this.employees = employees;
}

public Org getOrg() {
return org;
}

public void setOrg(Org org) {
this.org = org;
}

/** default constructor */
             .
             .
             .

}
@Entity
public class Employee  implements java.io.Serializable {


    // Fields    
	@Id
	@GeneratedValue
     private String employeeId;
     private String employeeName;
     private String passWord;
     private Integer age;
     private Integer sex;
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="department_id")
     private Department department;

     
    public Department getDepartment() {
		return department;
	}

	public void setDepartment(Department department) {
		this.department = department;
	}

	/** default constructor */
    ...
    // Property accessors
    ...
}


双向多对多:@ManyToMany.单向多对多这里不在赘述(没有太多实际意义)
这个比较简单,看下代码就明白了:
@Entity
public class Book  implements java.io.Serializable {
@Id
private int id;
private String name;
private float money;
@ManyToMany(cascade = CascadeType.ALL)
private List<Author> authors;


public List<Author> getAuthors() {
return authors;
}
public void setAuthors(List<Author> authors) {
this.authors = authors;
}

         ...
}

@Entity
public class Author  implements java.io.Serializable {
@Id
private int id;
private String name;
private int age;
@ManyToMany(mappedBy="authors")
private List<Book> books;


public List<Book> getBooks() {
return books;
}

public void setBooks(List<Book> books) {
this.books = books;
}

         ...
}


基于注解的hibernate主键设置:@Id.
那么它的生成规则是什么呢?是由@GeneratedValue来规定的。

我们先来看看它是如何定义的:
@Target({METHOD,FIELD})
	@Retention(RUNTIME)
	public @interface GeneratedValue{
		GenerationType strategy() default AUTO;
		String generator() default "";
	}


        
public enum GenerationType{
		TABLE,
		SEQUENCE,
		IDENTITY,
		AUTO
	}

现在我们看到了,它提供了4种生成策略:
TABLE:使用一个特定的数据库表格来保存标识符序列。
SEQUENCE:生成序列化标识符。
IDENTITY:标识符有数据库自动生成(主要是自动增长型)
AUTO:标识符生成工作由hibernate自动处理。实际项目开发不建议使用。
注意:当主键为int,而数据库中又不是自动增长型时,使用@GeneratedValue是无法正常工作的。

我们也可以使用下面的方式来自己指定我们的主键值:
          
@GeneratedValue(generator = "c-assigned")
	@GenericGenerator(name = "c-assigned", strategy = "assigned")
     private String employeeId;

或者直接不要定义@GeneratedValue,只定义@Id效果也是一样的。

分享到:
评论

相关推荐

    Hibernate 注解映射

    在使用 Hibernate 注解映射之前,需要添加相关的 jar 包,包括 hibernate-annotations.jar、ejb3-persistence.jar 和 hibernate-commons-annotations.jar。 在实体类中,可以使用 JPA 的标准注解来描述对象关系映射...

    Hibernate注解 关联关系映射注解.docx

    在Java的持久化框架Hibernate中,注解是用于简化对象关系映射(ORM)的一种方式。本篇文章将详细探讨在Hibernate中如何使用注解来处理各种关联关系,特别是`mappedBy`属性的用法。 首先,`@OneToMany`注解用于表示...

    Hibernate 3 注解技术讲解

    本文将深入探讨Hibernate 3中的注解技术,旨在为学习Hibernate 3的开发者提供一个清晰的理解。 ### 1. Hibernate 3 注解介绍 在Hibernate 3之前,实体类和它们与数据库表之间的映射通常通过XML配置文件(如...

    hibernate注解处理映射关系共14页.pdf.zip

    《Hibernate注解处理映射关系》是一份深入探讨Hibernate框架中注解应用的教程,共有14页内容,旨在帮助开发者更好地理解和运用Hibernate在数据库映射中的注解技术。Hibernate作为Java领域广泛使用的对象关系映射...

    让Hibernate同时支持xml和注解两种映射方式

    Hibernate支持两种主要的映射方式:XML映射文件和注解映射。然而,默认情况下,一个项目只能选择其中一种方式进行配置。但有时候,根据项目需求,可能需要同时使用XML和注解映射。在这种情况下,我们需要进行一些...

    Hibernate注解映射联合主键

    在Hibernate中,有三种主要的注解方式来映射联合主键,以下是对这三种方式的详细解释: 1. **使用`@Embeddable`和`@Id`** 在这种映射方式中,联合主键的字段被放在一个单独的类中,这个类需要实现`java.io....

    JAVA数据类型与Hibernate的类型映射

    而在Java持久化框架Hibernate中,这些数据类型需要与数据库中的字段类型进行映射,以便正确地存储和检索数据。这篇博客主要探讨了Java数据类型如何与Hibernate的类型映射进行对应。 首先,Java的基本数据类型在...

    Spring3+Struts2+Hibernate3 全注解集成开发

    在这个"Spring3+Struts2+Hibernate3 全注解集成开发"项目中,我们将深入探讨如何使用这三个框架的注解版本进行集成,以实现对Emp表的操作。 首先,Spring3是依赖注入(DI)和面向切面编程(AOP)的优秀框架。在全...

    hibernate array 数组映射

    3. 考虑使用`@ElementCollection`注解进行JPA2.1以上的数组映射,以获取更简洁的配置和更好的性能。 4. 为了保持数据一致性,确保索引列和元素列在数据库中有相应的约束。 以上就是关于`hibernate array 数组映射`...

    Hibernate初之单表映射学习例子

    3. **实体类设计**:讲解如何创建一个Java类作为数据库表的映射,包括使用`@Entity`注解标记实体类,`@Id`注解定义主键,以及其他字段的注解如`@Column`。 4. **XML映射文件**:解释Hibernate的Hibernate ...

    SpringMVC Hibernate3注解例子

    - **Hibernate注解** 除了前面提到的`@Entity`, `@Table`, `@Id`外,还有`@GeneratedValue`用于自动生成主键,`@ManyToOne`, `@OneToMany`等用于关联映射。 5. **运行与测试** 项目构建完成后,通过Tomcat或其他...

    struts2.0 spring2.5 hibernate3.2 注解最新框架

    开发者可能会在该文件中找到一个简单的Struts2 Action,一个带有注解的Spring Bean,以及一个用Hibernate注解配置的实体类。通过分析和运行这个`test`文件,可以更好地理解三大框架如何协同工作,以及注解如何简化...

    Hibernate全部注解

    ### Hibernate 全部注解详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM) 框架,允许开发人员...此外,Hibernate 还提供了更多的高级特性,如关联映射、查询语言等,有兴趣的读者可以进一步学习和探索。

    Hibernate注解配置表映射实例

    在这个“Hibernate注解配置表映射实例”中,我们将深入探讨如何使用Hibernate的注解来配置实体类与数据库表之间的映射。 Hibernate注解提供了在Java类和类属性上直接定义数据库映射的能力,避免了XML配置文件的繁琐...

    Hibernate4注解全教程

    Hibernate4注解是一种在Java对象模型中直接使用注解来...特别是对于已经熟悉EJB3的开发者而言,Hibernate注解的使用会显得更加自然和流畅。同时,这也使得Hibernate在当今的Java EE开发环境中保持了其竞争力和相关性。

    Hibernate继承映射代码

    这些代码可能包括实体类定义、映射文件(如.hbm.xml或使用注解的类)、Hibernate配置文件(hibernate.cfg.xml)以及C3P0的配置部分。通过对这些代码的学习和分析,我们可以更深入地理解如何在实际项目中运用这些技术...

    jpa/hibernate继承注解

    在Java Persistence API (JPA) 和 Hibernate ORM 框架中,继承注解是用于处理对象关系映射(ORM)中的类继承结构的关键概念。这些注解帮助开发者将数据库表的设计与面向对象的代码结构相匹配,使得在复杂的业务场景...

    Hibernate 注解说明文档

    本文档将深入探讨Hibernate注解的使用,帮助开发者更好地理解和利用这些注解来实现对象关系映射(ORM)。 一、Hibernate注解基础 Hibernate注解是一种元数据方式,用于在Java类和属性上声明数据库映射信息,从而...

    spring mvc + spring + hibernate 全注解整合开发视频教程 04

    在本视频教程“Spring MVC + Spring + Hibernate 全注解整合开发视频教程 04”中,我们将深入探讨Java企业级开发中的三大核心技术——Spring、Spring MVC和Hibernate的集成与应用,尤其是通过注解实现的简化配置。...

Global site tag (gtag.js) - Google Analytics