hibernate 3 映射学习

来源:互联网 发布:知乎口腔溃疡 冰硼散 编辑:程序博客网 时间:2024/06/06 08:24

关键字: hibernate,annotation

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

注解映射必须满足两大条件:Hibernate3.2以上版本和JSEE 5。
@Entity 类注释,所有要持久化的类都要有
Java代码 复制代码
  1. @Entity  
  2. public class Org  implements java.io.Serializable {   
  3. }  

@Id 主键
Java代码 复制代码
  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的从属类。
Java代码 复制代码
  1. @Entity  
  2. public class Org  implements java.io.Serializable {   
  3.   
  4.   
  5.     // Fields       
  6.     @Id  
  7.     @GeneratedValue  
  8.      private String orgId;   
  9.      private String orgName;   
  10.      @OneToMany(mappedBy = "org")   
  11.      private List<Department> departments;   
  12.   
  13.     // Constructors   
  14. ...   
  15.     // Property accessors   
  16. ...   
  17. }  

Java代码 复制代码
  1. @Entity  
  2. public class Department  implements java.io.Serializable {   
  3.   
  4.   
  5.     // Fields       
  6.     @Id  
  7.     @GeneratedValue  
  8.      private String id;   
  9.      private String name;   
  10.      @ManyToOne(fetch=FetchType.EAGER)   
  11.      @JoinColumn(name="org_orgId")   
  12.      private Org org;   
  13.      @OneToMany(mappedBy = "department")   
  14.      private List<Employee> employees;   
  15.   
  16.     // Constructors   
  17.   
  18.     public List<Employee> getEmployees() {   
  19.         return employees;   
  20.     }   
  21.   
  22.     public void setEmployees(List<Employee> employees) {   
  23.         this.employees = employees;   
  24.     }   
  25.   
  26.     public Org getOrg() {   
  27.         return org;   
  28.     }   
  29.   
  30.     public void setOrg(Org org) {   
  31.         this.org = org;   
  32.     }   
  33.   
  34.     /** default constructor */  
  35.              .   
  36.              .   
  37.              .   
  38.        
  39. }  

Java代码 复制代码
  1. @Entity  
  2. public class Employee  implements java.io.Serializable {   
  3.   
  4.   
  5.     // Fields       
  6.     @Id  
  7.     @GeneratedValue  
  8.      private String employeeId;   
  9.      private String employeeName;   
  10.      private String passWord;   
  11.      private Integer age;   
  12.      private Integer sex;   
  13.      @ManyToOne(fetch=FetchType.EAGER)   
  14.      @JoinColumn(name="department_id")   
  15.      private Department department;   
  16.   
  17.         
  18.     public Department getDepartment() {   
  19.         return department;   
  20.     }   
  21.   
  22.     public void setDepartment(Department department) {   
  23.         this.department = department;   
  24.     }   
  25.   
  26.     /** default constructor */  
  27.     ...   
  28.     // Property accessors   
  29.     ...   
  30. }  


双向多对多:@ManyToMany.单向多对多这里不在赘述(没有太多实际意义)
这个比较简单,看下代码就明白了:
Java代码 复制代码
  1. @Entity  
  2. public class Book  implements java.io.Serializable {   
  3.     @Id  
  4.     private int id;   
  5.     private String name;   
  6.     private float money;   
  7.     @ManyToMany(cascade = CascadeType.ALL)   
  8.     private List<Author> authors;   
  9.        
  10.   
  11.     public List<Author> getAuthors() {   
  12.         return authors;   
  13.     }   
  14.     public void setAuthors(List<Author> authors) {   
  15.         this.authors = authors;   
  16.     }   
  17.        
  18.          ...   
  19. }  


Java代码 复制代码
  1. @Entity  
  2. public class Author  implements java.io.Serializable {   
  3.     @Id  
  4.     private int id;   
  5.     private String name;   
  6.     private int age;   
  7.     @ManyToMany(mappedBy="authors")   
  8.     private List<Book> books;   
  9.        
  10.   
  11.     public List<Book> getBooks() {   
  12.         return books;   
  13.     }   
  14.   
  15.     public void setBooks(List<Book> books) {   
  16.         this.books = books;   
  17.     }   
  18.   
  19.          ...   
  20. }  


总算弄完了,不过还是一个皮毛!
需要注意的是:注释最好加在属性上,不要加在get方法上,那样做有时候就会出错。比如:@ManyToMany的时候就会报错!
 
原创粉丝点击