@Entity 实体,需要插入数据库的对象。
必须有一个无参数的构造方法;实体Bean必须声明为public;实体Bean不能被声明为abstract。
@Table 实体对应的表信息
@id 配置主键,可以是一个属性也可以是多个属性的组合。主键可以应用于属性页可以应用于get方法。应用于属性时,改属性的get方法不会被Hibernate调用,可以去掉。
@GeneratedValue 指定主键访问策略
@GeneratedValue(strategy=javax.persistence.GenerationType.IDENTITY)由数据库确定下个主键值。
javax.persistence.GenerationType.AUTO:自动确定主键类型(默认)
javax.persistence.GenerationType.SEQUENCE:主键是SEQUENCE类型字段(自定义主键排序类型)
@SequenceGenerator 使用Hibernate内置或者自定义的各种主键生成策略来生成主键值
@Basic 设置对象属性转载数据库的策略
fetch:设置装载数据的策略:EAGER-加载时装载所有属性,LAZY-属性被使用时方被装载。(默认为EAGER,使用LAZY需要使用字节增长编译他的Java文件)
optional:当前属性是否可以为null。
@Transient 不需要持久化的属性可以用transient注释标识。
@Column 列定义的注解
@Enumerated 枚举
@Temporal 描述时间格式
@Temporal(TemporalType.DATE)记录年月日,@Temporal(TemporalType.TIMESTAMP)记录准确时间,精确到毫秒,@Temporal(TemporalType.TIME)记录时分秒。
@Lob 大数据类型
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.sysmaster.util.EnuSex;
@Entity
@Table(name="T_PEOPLE")
public class People
{
private int pid;
private String name;
private EnuSex sex;
private Date birthday;
private String introduce;
@Id//主键
@SequenceGenerator(name="seq",sequenceName="SEQ_PEOPLE",initialValue=1,allocationSize=20)
@GeneratedValue(generator="seq")//使用自定义sequence
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
@Column(length=10)//设置该属性的长度为10
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Enumerated(EnumType.STRING)//设置为String
public EnuSex getSex() {
return sex;
}
public void setSex(EnuSex sex) {
this.sex = sex;
}
@Lob
@Basic(fetch=FetchType.LAZY)//大数据延迟加载,需要使用字节增强编译
public String getIntroduce() {
return introduce;
}
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
@Temporal(TemporalType.TIMESTAMP)//设置时间存入类型
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
字节增强编译使用xml 的Ant 编译,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="myh" default="instrument" basedir=".">
<property name="lib.dir" value="./WEB-INF/lib"/><!--所使用的类库所在位置-->
<property name="classes.dir" value="../build/classes"/><!--你的编译class文件所在位置 -->
<path id="lib.class.path">
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="instrument">
<taskdef name="instrument"
classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
<classpath path="${classes.dir}"/>
<classpath refid="lib.class.path"/>
</taskdef>
<instrument verbose="true">
<fileset dir="${classes.dir}/com/sysmaster/po"><!--文件所在包-->
<include name="People.class"/><!--需要增强处理的文件-->
</fileset>
</instrument>
</target>
</project>