注解映射必须满足两大条件:Hibernate3.2以上版本和JSEE 5。 
@Entity 类注释,所有要持久化的类都要有
@Entity   
public class Org  implements java.io.Serializable {    
}   
@Id 主键       
@Id   
     @GeneratedValue   
     private String orgId;    
     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  
Java代码 
@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 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 */
             .
             .
             .
}
Java代码 
@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    
     ...    
}

@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来规定的。 
我们先来看看它是如何定义的: 
Java代码 
@Target({METHOD,FIELD})    
    @Retention(RUNTIME)    
    public @interface GeneratedValue{    
         GenerationType strategy() default AUTO;    
         String generator() default "";    
     }

@Target({METHOD,FIELD})   @Retention(RUNTIME)   public @interface GeneratedValue{    GenerationType strategy() default AUTO;    String generator() default "";   }

Java代码 
public enum GenerationType{    
         TABLE,    
         SEQUENCE,    
         IDENTITY,    
         AUTO    
     }

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

现在我们看到了,它提供了4种生成策略: 
TABLE:使用一个特定的数据库表格来保存标识符序列。 
SEQUENCE:生成序列化标识符。 
IDENTITY:标识符有数据库自动生成(主要是自动增长型) 
AUTO:标识符生成工作由hibernate自动处理。实际项目开发不建议使用。 
注意:当主键为int,而数据库中又不是自动增长型时,使用@GeneratedValue是无法正常工作的。 
我们也可以使用下面的方式来自己指定我们的主键值: 
           
Java代码 
@GeneratedValue(generator = "c-assigned")    
    @GenericGenerator(name = "c-assigned", strategy = "assigned")    
     private String employeeId;

@GeneratedValue(generator = "c-assigned")   @GenericGenerator(name = "c-assigned", strategy = "assigned")       private String employeeId;

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

Hibernate 注解的用法以及说明(二)的更多相关文章

  1. Hibernate 注解的用法以及说明

    1.类级别注解 @Entity     映射实体类 @Table    映射数句库表  @Entity(name="tableName") - 必须,注解将一个类声明为一个实体be ...

  2. Hibernate 注解中CascadeType用法汇总

    这两天,参加一个课程设计,同时这个项目又作为一个模块镶嵌到其他项目中,考虑如此,应与原先的架构相同,因牵扯到留言和相互@功能,故数据库之间OneToOne,OneToMany,ManyToMany之风 ...

  3. hibernate注解(自动建表如何有表DDL注释) -- Comment用法

    import java.io.Serializable; import java.sql.Date; import java.sql.Timestamp; import javax.persisten ...

  4. Hibernate注解----关联映射注解以及课程总结详解----图片版本

    上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...

  5. Hibernate注解----类级别注解以及属性注解详解----图片版本

    这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...

  6. Hibernate注解使用以及Spring整合

    Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...

  7. hibernate 注解 主键生成策略

    一.JPA通用策略生成器       通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue ...

  8. Hibernate注解映射联合主键的三种主要方式

    今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...

  9. hibernate注解的简单应用

    注解代替了我们用的*.hbm.xml文件.简少了我们的代码量:应用简单. @Override 用途:重写父类的同名方法 单元测试注解 @Test 用途:用于测试 @Before 用途:单测方法走之前执 ...

随机推荐

  1. 浅谈oracle10G spfile与pfile(转)

    转自:http://blog.csdn.net/onebigday/article/details/6108348,http://www.linuxidc.com/Linux/2012-11/7371 ...

  2. review again and again

    盲评结果出来了.然而对于我并没有太大的影响.从头到尾我没有紧张过,自然也不会有如释重负的感觉. 昨天说了事情要提前做准备.早上,到教研室挺早,review的时候,发现论文中一个关于目录的小问题,解决掉 ...

  3. python Django教程 之 安装、基本命令、视图与网站

    python  Django教程  之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...

  4. Objective C ARC 使用及原理

    手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档过程中的疑问和答案写下来.下面有些是翻译,但 ...

  5. 如何使用THashedStringList

    1.添加 uses system.IniFiles 2.实例代码: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System ...

  6. Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

  7. leetcode 191

    191. Number of 1 Bits Write a function that takes an unsigned integer and returns the number of ’1' ...

  8. excel 作图中次横坐标及次纵坐标的调试,以及excel自定义轴标签的步骤方法

    在工作中除了要做一些常用的图表之外,不时还会有一切奇怪图表的制作需求. 今天的内容主要记录的是如何对excle图表的次横坐标及次纵坐标进行调试,以及如何自定义调整轴标签 首先看下如何做次纵坐标,工作中 ...

  9. springboot一个service内组件的加载顺序

    先加载自身构造器,所以在构造器中初始化时若使用需要注入的(即@Autowired注解的)组件相关的方法,则会报null: 然后加载注入的组件即@Autowired 最后加载@PostConstruct ...

  10. GsonUtils.getGson().fromJson() 转泛型集合

    List<QiTaFree> qiTaFreeList = GsonUtils.getGson().fromJson(exhiMain.getQiTaFressJson(), new Ty ...