hibernate3的注解映射学习

转载 2011年01月18日 15:19:00

注解映射必须满足两大条件: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  
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. }  

@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代码 复制代码
  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.单向多对多这里不在赘述(没有太多实际意义)
这个比较简单,看下代码就明白了:
@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代码 复制代码
  1. @Target({METHOD,FIELD})   
  2.     @Retention(RUNTIME)   
  3.     public @interface GeneratedValue{   
  4.         GenerationType strategy() default AUTO;   
  5.         String generator() default "";   
  6.     }  


        
Java代码 复制代码
  1. public enum GenerationType{   
  2.         TABLE,   
  3.         SEQUENCE,   
  4.         IDENTITY,   
  5.         AUTO   
  6.     }  

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

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

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

相关文章推荐

hibernate3学习笔记(十七)|关系映射:多对一

数据表设计如下图: DDL文件: CREATE TABLE user (    id INT(11) NOT NULL auto_increment PRIMARY...

hibernate3学习笔记(十九)|关系映射:一对一

A.唯一外键关联 DDL: CREATE TABLE user (    id INT(11) NOT NULL auto_increment PRIMARY...

hibernate3学习笔记(十八)|关系映射:一对多

User对Room是多对一的关系,那么反过来Room对User就是一对多的关系了。 User.java: package com.hb3.pack_17.model;public clas...

hibernate3学习笔记(十五)|继承映射

这里详细讨论继承映射的3种方式: 1.Table per concrete class 继承关系如下图: 数据表设计如下图: MySQL数据库中执行如下DDL: CREATE...

《妙解Hibernate3.x》读书笔记三-配置文件和映射文件的补充

我们在做项目过程中,使用了辅助工具Hibernate Tools,从而不用手写配置文件,只需自己创建数据库即可。所以稍微做下介绍。在映射文件中,都指出了类的属性类型,以便于与数据库中的数据类型对应。一...
  • whuqin
  • whuqin
  • 2011-04-12 21:45
  • 1109

Ant + XDoclet2生成Hibernate3的配置及映射文件

第一步:Ant的使用 先简单介绍一下吧,解压后,将解压目录设置到环境变量ANT_HOME(确保JAVA_HOME有效),然后在path中添加%ANT_HOME%/bin,这时在cmd中运行ant...

Hibernate3 之 继承映射

1. 父类和子类 公用一张表:

【Hibernate3】(5)关联映射(二)

一. 一对多双向关联 在Contact类中,新建关于Group的成员: public class Contact { private int id; private String name; ...

Hibernate3.x关联映射示例

  • 2013-03-03 17:10
  • 746KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)