从Java的角度讲,实体类就是普通的POJO。
仅从POJO中Hibernate并不能得知实体类对应哪个数据表,因此还需要以某种方式配置一下。
常用的方式有*.hbm.xml文件配置与@注解配置两种。
@注解配置
实体类一般有id、普通属性、集合属性等,分别对应数据库的主键、普通列、外键。
@Entity | 实体类 |
@Table | 数据表 |
@Id | 主键 |
@Column | 配置普通属性 |
@OneToMany、@ManyToOne、@OneToOne、@ManyToMany | 配置实体间的关系 |
所有的@注解都是javax.persistence.*下的,而不是org.hibernate.*下。javax.persistence.*下的注解为JPA规范规定的注解,用于标实体类与数据库的映射关系,而org.hibernate.*下的注解仅用于补充,当某个功能JPA暂时不支持而Hibernate支持时使用。
@Entity //@Entity表示该类能被Hibernate持久化
@Table(name = "tb_cat") // 指定该Entity对应的数据表名
publicclassCat {
@Id // 指定该列为主键
@GeneratedValue(strategy = GenerationType.AUTO) // 主键生成策略,auto为auto_increment
private Integer id;
@Column(name="name") // 指定属性对应的数据库表的列名为name
private String name;
private String description; // 同上,@column与name属性均可省略
@ManyToOne // 指定实体类之间多对一的关系
@JoinColumn(name="mother_id") // 该属性对应的列
private Cat mother;
@Temporal(TemporalType.TIMESTAMP) // 日期类型(DATE,TIME或TIMESTEMP
@Column(name="createDate")
private Date createDate;
// 省略各Field的getter、setter方法
}
XML配置
多个实体类可以配置在一个XML文件中。Hibernate推荐使用一个同名的XML文件配置一个实体类,便于阅读与维护。
XML文件一般以".hbm.xml"结尾,便于辨认,当然也可以直接用".xml"结尾。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Mapping file autogenerated by MyEclipse Persistence Tools-->
<hibernate-mapping>
<classname="bar.foo.hibernate.entity.Cat"table="tb_cat">
<idname="id" column="id">
<generatorclass="native" />
</id>
<many-to-onename="mother" column="mother_id" />
<propertyname="createDate" column="createDate" />
<propertyname="description" column="description" />
<propertyname="name" column="name" />
</class>
</hibernate-mapping>
配置到Hibernate.cfg.xml中
<!-- 在Hibernate中声明用@注解配置的实体类 -->
<mapping class="bar.foo.hibernate.entity.Cat"/>
<!-- 在Hibernate中声明用XML配置的实体类 -->
<mapping resource="bar/foo/hibernate/entity/Cat.hbm.xml"/>
今天就先写到这里,更多学习资料