一:单实体的对象标识符映射
Hibernate采用对象标识符(OID)区分对象。
OID是关系数据库中主键(通常是代理主键)在Java对象模型中的等价物;
Hibernate采用OID来维持java对象和数据库表中对应关系。
Hibernate允许在持久化类中把OID定义为以下三种类型:Short,Integer,Long
在对象-关系映射配置文件中元素的子元素用来设置OID。<generator >子元素用来指定OID的生成器。
示例:
<class name="User" table="t_user"> <id name="id" type="int" > <column name="id"></column> <generator class="identity"></generator> </id> </class>
1.increment关键字
- increment采用Hibernate数值递增的方式
hibernate先从数据库中查询出表中id的最大值,然后再向表中插入新纪录,所以表中的id都是连续的.
<class name="User" table="t_user"> <id name="id" type="int" > <column name="id"></column> <generator class="increment"></generator> </id> <property name="userName" column="user_name" type="java.lang.String"> </property> <property name="passWord" type="java.lang.String"></property> </class>
2.identity关键字
- identity采用数据库提供的自增长方式(需要数据库支持自动增长字段)
这种方法使用了数据库底层的东西,每次添加的记录都会按照数据库的增加进行增加.id不连续.
<class name="User" table="t_user"> <id name="id" type="int" > <column name="id"></column> <generator class="identity"></generator> </id> <property name="userName" column="user_name" type="java.lang.String"> </property> <property name="passWord" type="java.lang.String"></property> </class>
3.assigned关键字
- assigned主键由应用逻辑产生
这个关键字按照新记录设置的id是多少就会在表中插入多少
<?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"> <hibernate-mapping package="com.hibernate.entity"> <class name="User" table="t_user"> <id name="id" type="int" > <column name="id"></column> <generator class="assigned"></generator> </id> <property name="userName" column="user_name" type="java.lang.String"> </property> <property name="passWord" type="java.lang.String"></property> </class> </hibernate-mapping>
二:使用注解映射单实体
作用:代替配置文件,直接在实体类里声明
@Entity:声明一个实体类.
@Table(name=“table_name”):为实体类指定对应的数据库表.
@Id:声明实体类的OID属性.
@generatedValue(generator=“increment_generator”):声明OID的生成策略.
@GenericGenerator(name=“increment_generator”,startegy=“increment”):使用Hibernate的生成策略.
@Column(name=“columnName”):将属性映射到列.
name="columnName"字段名称;
unique=false 是否在该字段上设置唯一约束;
nullable=true 字段是否能为空;
@Formula:将属性映射到SQL语句.
@Formula(value="(select * from student)")
示例:
package com.hibernate.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.Formula; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name="t_user") public class User { private Integer id; private String userName; private String passWord; @Id @GeneratedValue(generator="generator_increment") @GenericGenerator(name="generator_increment",strategy="increment") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name="user_name") public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Column(name="password") public String getPassWord() { return passWord; } @Formula(value="(select * from student)") public void setPassWord(String passWord) { this.passWord = passWord; } @Override public String toString() { return "User [id=" + id + ", userName=" + userName + ", passWord=" + passWord + "]"; } }
最后小声bb:这个课可能已经传承了10几年了.哭