hibernate 3 映射学习
来源:互联网 发布:知乎口腔溃疡 冰硼散 编辑:程序博客网 时间:2024/06/06 08:24
关键字: hibernate,annotation
基于注解的hibernate主键设置:@Id.
那么它的生成规则是什么呢?是由@GeneratedValue来规定的。
注解映射必须满足两大条件:Hibernate3.2以上版本和JSEE 5。
@Entity 类注释,所有要持久化的类都要有
@Id 主键
@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的从属类。
双向多对多:@ManyToMany.单向多对多这里不在赘述(没有太多实际意义)
这个比较简单,看下代码就明白了:
总算弄完了,不过还是一个皮毛!
需要注意的是:注释最好加在属性上,不要加在get方法上,那样做有时候就会出错。比如:@ManyToMany的时候就会报错!
@Entity 类注释,所有要持久化的类都要有
- @Entity
- public class Org implements java.io.Serializable {
- }
@Entity public class Org implements java.io.Serializable { }
@Id 主键
- @Id
- @GeneratedValue
- private String orgId;
- private String orgName;
@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
- 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 */
- .
- .
- .
- }
@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
- ...
- }
@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 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;
- }
- ...
- }
@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; } ... }
总算弄完了,不过还是一个皮毛!
需要注意的是:注释最好加在属性上,不要加在get方法上,那样做有时候就会出错。比如:@ManyToMany的时候就会报错!
- hibernate 3 映射学习
- ssh学习:hibernate关系映射(3)
- Hibernate学习笔记3--映射关联关系
- Hibernate继承映射学习
- Hibernate集合映射学习
- hibernate映射学习(一)
- hibernate映射学习(三)
- Hibernate一对一映射学习
- Hibernate学习6 -- hibernate映射文件3 -- id元素
- Hibernate学习(3)------ Hibernate的映射文件
- Hibernate学习笔记(3)---hibernate关联关系映射
- Hibernate学习笔记-映射
- Hibernate学习笔记:组件映射
- Hibernate学习文档_Composite映射
- Hibernate关联映射学习笔记
- hibernate学习笔记(map映射)
- Hibernate学习_011_组件映射
- Hibernate学习_015_集合映射
- 1.1从Hello Qt开始
- 编程语言你怎么选?
- Class Loader
- 勾股数列表(Find Pythagorean Triples)
- 获得汉字字符串拼音首字母 C#版
- hibernate 3 映射学习
- “只弯一次腰”的故事
- SQL Server 通配符(用于Like 查询)
- string数组类型转换为int数组(数组类型之间的转换)
- 1.2连接信号和响应函数
- 如果你电脑上安装的是IE7 一个很容易的方法
- ASP.NET获取IP和电脑用户名
- PL/SQL基础小结
- apt-get命令参数1