Hibernate 映射关系注解属性详解
2013-11-06 17:31
309 查看
注解映射必须满足两大条件:Hibernate3.2以上版本和JSEE 5。
1.标准注解
@Entity 类注释,所有要持久化的类都要有
@Entity
public class Org implements java.io.Serializable {
}
@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:定义双向关联中的从属类。
2.Hibernate
Annotation关系映射有下面几种类型:
1) 一对一外键关联映射(单向)
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="userid",unique=true)
一对一外键关联,使用@OneToOne,并设置了级联操作。@JoinColum设置了外键的名称为userid(数据库字段名),如果不设置,则默认为另一类的属性名+ _id,外键的值是唯一的(unique)。
2) 一对一外键关联映射(双向)
Class1里与上面一样,
Class2:
@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)
一对一双向关联关系,使用@OneToOne
注意:需要加上mappedBy="class2",如果不加上的话,Class2也会生成一个外键(class1_id),mappedby="class2"需要指向与他关联对象的一个属性,说明双向关联关系中,有且仅有一端是作为主体(owner)端存在的,主体端负责维护联接列,对于不需要维护这种关系的从表则通过mappedBy属性进行声明,mappedBy的值指向主体的关联属性
规律:只有是双向关联关系,都加上mappedby
3)(嵌入式对象)组件映射
将另外一个类成为实体类的一部分进行映射;
注意:1.成为其他实体类一部门的类不要注解为@Entity 实体类!
2. 使用@Embedded 将其类注解即可;
3.组件属性名名为了保证不与实体类属性名冲突,可以使用如下注解:
3.1 使用如下形式:
3.2 在嵌入式对象里,对其属性使用@column进行设置
4) 一对多关联映射(单向)
@OneToMany
@JoinColumn(name="orgid")
/**
* 一对多注解@OneToMany(单向)
* 如果只写@OneToMany的话,hibernate会建一张中间表来
* 维护他们之间的关系,
* 加上@JoinColumn(name="orgid"),则不会建中间表,他会在
* 多的一端加上外键orgid,来维护他们之间的关系
*/
5) 一对多关联映射(双向)
一端:
@OneToMany(mappedBy="org")
@JoinColumn(name="orgid")
/**
* 一对多双向,在一的一端中设置mappedBy
* 说明多的一端为主导
* 如果指定了外键字段名称,则多的一端也需要指定相同的字段名称
*/
多端:
@ManyToOne
@JoinColumn(name="orgid")
/**
* 一对多双向
* 需要指定外键与一的一端给的外键名称一致,@JoinColumn(name="orgid")
* 也可以不指定,如果在多的一端不指定,则一的一端也不能指定
* 否则为生成两个外键
*/
6) 多对一关联映射
在多的一端配置:
@ManyToOne(targetEntity=Organization.class)
@JoinColumn(name="orgid")
//多对一注解@ManyToOne
//targetEntity指定了关联对象
//@JoinColumn(name="orgid")指定生产的外键的字段名,默认是org_id
7) 多对多关联映射(单向)
@ManyToMany
/**
* 多对多映射:注解@ManyToMany(单向)
* 默认情况下,hibernate会自动的创建一张中间表,
* 来维护多对多关系
* 默认中间表的名称 :user_role中间表,字段的名称user_id role_id
* 如果想更换表名和字段名称,注解如下:
*/
@JoinTable(name="t_u_r",
joinColumns={@JoinColumn(name="u_id")},
inverseJoinColumns={@JoinColumn(name="r_id")}
)
8) 多对多关联映射(双向) User端
@ManyToMany
/**
* 多对多映射:注解@ManyToMany(单向)
* 默认情况下,hibernate会自动的创建一张中间表,
* 来维护多对多关系
* 默认中间表的名称 :user_role中间表,字段的名称user_id role_id
* 如果想更换表名和字段名称,注解如下:
*/
@JoinTable(name="t_u_r",
joinColumns={@JoinColumn(name="u_id")},
inverseJoinColumns={@JoinColumn(name="r_id")}
)
/**
* @JoinTable(name="t_u_r",
* 指定中间表的表名
* joinColumns={@JoinColumn(name="u_id")},
* 指定当前对象的外键
* inverseJoinColumns={@JoinColumn(name="r_id")}
* 指定关联对象的外键
*/
Role端
@ManyToMany(mappedBy="role")
/**
* 多对多,双向关联映射
*/
1.标准注解
@Entity 类注释,所有要持久化的类都要有
@Entity
public class Org implements java.io.Serializable {
}
@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:定义双向关联中的从属类。
2.Hibernate
Annotation关系映射有下面几种类型:
1) 一对一外键关联映射(单向)
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="userid",unique=true)
一对一外键关联,使用@OneToOne,并设置了级联操作。@JoinColum设置了外键的名称为userid(数据库字段名),如果不设置,则默认为另一类的属性名+ _id,外键的值是唯一的(unique)。
2) 一对一外键关联映射(双向)
Class1里与上面一样,
Class2:
@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)
一对一双向关联关系,使用@OneToOne
注意:需要加上mappedBy="class2",如果不加上的话,Class2也会生成一个外键(class1_id),mappedby="class2"需要指向与他关联对象的一个属性,说明双向关联关系中,有且仅有一端是作为主体(owner)端存在的,主体端负责维护联接列,对于不需要维护这种关系的从表则通过mappedBy属性进行声明,mappedBy的值指向主体的关联属性
规律:只有是双向关联关系,都加上mappedby
3)(嵌入式对象)组件映射
将另外一个类成为实体类的一部分进行映射;
注意:1.成为其他实体类一部门的类不要注解为@Entity 实体类!
2. 使用@Embedded 将其类注解即可;
3.组件属性名名为了保证不与实体类属性名冲突,可以使用如下注解:
3.1 使用如下形式:
4) 一对多关联映射(单向)
@OneToMany
@JoinColumn(name="orgid")
/**
* 一对多注解@OneToMany(单向)
* 如果只写@OneToMany的话,hibernate会建一张中间表来
* 维护他们之间的关系,
* 加上@JoinColumn(name="orgid"),则不会建中间表,他会在
* 多的一端加上外键orgid,来维护他们之间的关系
*/
5) 一对多关联映射(双向)
一端:
@OneToMany(mappedBy="org")
@JoinColumn(name="orgid")
/**
* 一对多双向,在一的一端中设置mappedBy
* 说明多的一端为主导
* 如果指定了外键字段名称,则多的一端也需要指定相同的字段名称
*/
多端:
@ManyToOne
@JoinColumn(name="orgid")
/**
* 一对多双向
* 需要指定外键与一的一端给的外键名称一致,@JoinColumn(name="orgid")
* 也可以不指定,如果在多的一端不指定,则一的一端也不能指定
* 否则为生成两个外键
*/
6) 多对一关联映射
在多的一端配置:
@ManyToOne(targetEntity=Organization.class)
@JoinColumn(name="orgid")
//多对一注解@ManyToOne
//targetEntity指定了关联对象
//@JoinColumn(name="orgid")指定生产的外键的字段名,默认是org_id
7) 多对多关联映射(单向)
@ManyToMany
/**
* 多对多映射:注解@ManyToMany(单向)
* 默认情况下,hibernate会自动的创建一张中间表,
* 来维护多对多关系
* 默认中间表的名称 :user_role中间表,字段的名称user_id role_id
* 如果想更换表名和字段名称,注解如下:
*/
@JoinTable(name="t_u_r",
joinColumns={@JoinColumn(name="u_id")},
inverseJoinColumns={@JoinColumn(name="r_id")}
)
8) 多对多关联映射(双向) User端
@ManyToMany
/**
* 多对多映射:注解@ManyToMany(单向)
* 默认情况下,hibernate会自动的创建一张中间表,
* 来维护多对多关系
* 默认中间表的名称 :user_role中间表,字段的名称user_id role_id
* 如果想更换表名和字段名称,注解如下:
*/
@JoinTable(name="t_u_r",
joinColumns={@JoinColumn(name="u_id")},
inverseJoinColumns={@JoinColumn(name="r_id")}
)
/**
* @JoinTable(name="t_u_r",
* 指定中间表的表名
* joinColumns={@JoinColumn(name="u_id")},
* 指定当前对象的外键
* inverseJoinColumns={@JoinColumn(name="r_id")}
* 指定关联对象的外键
*/
Role端
@ManyToMany(mappedBy="role")
/**
* 多对多,双向关联映射
*/
相关文章推荐
- Hibernate 映射关系注解 属性详解
- Hibernate 映射关系注解 属性详解
- Hibernate 映射关系注解 属性详解
- spring+hibernate实体类注解详解(非原创) + cascade属性取值
- hibernate的注解属性mappedBy详解【实际项目】
- hibernate注解属性mappedby的详解
- hibernate的注解属性mappedBy详解
- hibernate的注解属性mappedBy详解
- hibernate的注解属性mappedBy详解
- spring+hibernate实体类注解详解(非原创) + cascade属性取值
- Hibernate注解----类级别注解以及属性注解详解----图片版本
- Hibernate——映射关系中的属性详解
- Hibernate之mappedBy属性详解
- hibernate注解的CascadeType属性
- hibernate注解的CascadeType属性
- hibernate 多对多注解配置及实体属性条件查询
- Hibernate注解详解
- Hibernate注解-类与属性
- 详解hibernate双向多对多关联映射XML与注解版
- Hibernate注解----关联映射注解以及课程总结详解----图片版本