XML方式:
1、Student.hbm.xml文件配置(generator class 可以有多种,常用的是native、uuid),native是交由数据库来创建主键,oracle是通过sequence。
<hibernate-mapping package="com.jimmy.hibernate.model">
<class name="Student">
<id name="id" >
<generator class="native"></generator>
</id>
<property name="age"/>
<property name="name"/>
</class>
</hibernate-mapping>
Annotation方式:
在主键对应的getId()方法上添加@id ,@GeneratedValue(默认值是native)
@Id
@GeneratedValue
public int getId() {
return id;
}
上面的代码在数据库产生的seq是系统默认创建的,名字统一都叫Hibernate_Sequence,并且多个类都是用这个SEQ。若要指定生成一个SEQ,则需要通过@SequenceGenerator (序列生成器),具体代码如下:
package com.jimmy.hibernate.model;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
@Entity
@SequenceGenerator(name="teacherSEQ",sequenceName="teacherSEQ_DB")//定义一个名叫“teacherSEQ”序列生成器,在数据库中的序列名"teacherSEQ_DB"
public class Teacher {
private int id;
private String name;
private String title;
private Date birthday;
@Temporal(TemporalType.DATE)
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherSEQ")//采用sequence的策略,生成器用“teacherSEQ”
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public void save(){
Configuration cf=new AnnotationConfiguration();
SessionFactory sf=cf.configure().buildSessionFactory();
Session session=sf.openSession();
session.beginTransaction();
session.save(this);
session.getTransaction().commit();
session.close();
sf.close();
}
}