Hibernate注解
- Hibernate类级别注解
- Hibernate属性级别注解
- Hibernate关系映射级别注解
一、Hibernate类级别注解
@Entity //指定一个类是标准的实体类(要映射到数据表)
@Embeddable //表示此类并不是一个实体类(创建表格)而是一个可以嵌入到另一个实体类中作为属性存在(组件属性),只要一个类添加上@Embeddable注解则表示此类是一个切入类,此类只是抽取出属性了不创建表。
@Table
1、@Entity
作用:指定一个类是标准的实体类(要映射到数据表)
使用@Entity
可以指定此实体类是一个标准的类,可以映射到数据库中的表格,表格的名称是类名称(小写)。
2、@Embeddable
作用:表示此类并不是一个实体类(创建表格)而是一个可以嵌入到另一个实体类中作为属性存在(组件属性)
只要一个类添加上@Embeddable
注解则表示此类是一个切入类,此类只是抽取出属性了不创建表。
在标准的实体类中引用上面类:
@Entity
public class Person implements Serializable{
@Id
private Integer pid;
private MyEntity entity;...
}
3、@Entity(name="t_person")
作用:不使用Hibernate默认的生成表格名称
@Entity(name="t_person")
//以上的方法其实和使用以下组合使用时一样的效果:
@Entity
@Table(name="t_per")
以上的两种方式都可以实现修改表格的名称,但是在实际的开发中建议大家使用第二种组合,因为在以后的开发中不是只出现Hibernate注解还会有一些其他的框架也要使用注解来完成,如果直接使用@Entity(name="t_per")
很可能出现版本的冲突.
当使用了注解的时候其实hbm.xml配置文件就不存在了,这时在Hibernate 的核心配置文件中要引入的不再是配置文件路径了,而是直接指定的是类名称:
<mapping class="com.sram.entity.Person"/>
二、Hibernate属性级别注解
@Id
@GeneratedValue(generator="sram")//给策略起个名称
@GenericGenerator(name="sram",strategy="native")//将策略名称为sram设置为自增
@Column(length=20,name="name",nullable=false,unique=true)//控制表格中的列的属性
@Transient//控制当前属性,不让其映射到表格中:对象序列化使用过此注解,此注解的功能就是让指定的属性不被序列化,其实在Hibernate框架中它也可以过滤属性。
1、@ID
作用:指定生成表格的主键(记得自己需要的主键生成策略),一张完整的表中至少有一个主键:
1.1 将一个int型的属性pid当作表格的主键。
@Entity
@Table(name="t_per")
public class Person implements Serializable{
@Id//指定表的主键字段
private Integer pid;
...}
1.2 字符串当做主键的时候必须指定此字段的长度
//让一个String类型的属性当作表格的主键,并且指定了主键的名称和长度。
@Id
@Column(length=20)
private String pname;
1.3 需要修改主键的策略的时候使用:
//以下的注解实现了根据数据库类型制定主键的自增。
@Id
@GeneratedValue(generator="sram")//给策略起个名称
@GenericGenerator(name="sram",strategy="native")//将策略名称为sram设置为自增
private Integer pid;
1.4 控制表格中的列的属性:
@Column(name="sname",length=20,nullable=false)
//字段的长度为20,在数据表中的字段为name,不为空,内容唯一
//以上的注解是实现列名称改为pname,长度为20,非空,唯一。
2、@Transient
作用:控制当前属性,不让其映射到表格中:
对象序列化使用过此注解,此注解的功能就是让指定的属性不被序列化,其实在Hibernate框架中它也可以过滤属性。