目录
一:单实体的对象标识符映射
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几年了.哭