1、OID生成策略 hibernate使用OID唯一标示一个po对象 数据库使用主键唯一标示一个实体 hbm.xml: id 指定OID(对象标识符) generator 指定生成主键的主要方式 native 根据底层数据库对自动生成标识符的支持能力, 来选择主键生成方式 oracle 自动生成hibernate_sequence的序列 increment Hibernate生成,select max(STUDENTID) 作为主键 适合所有数据库 id
2、entity 由底层数据库(支持自动增长)生成,常用于sqlserver mysql
sequence 由数据库提供的序列生成,适合Oracle
Assigned 通过程序指定 不指定generator时的默认
uuid 使用全球唯一标示生成主键
常用配置:
3、
4、sequenceName="SEQ_TEACHER",allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_teacher")
//mysql:
@GeneratedValue(strategy=GenerationType.IDENTITY)
映射自然主键(不指定自动增长的主键)
hbm.xml
5、ationType.AUTO) 映射自然复合主键 映射文件版本 /*==============================================================*/ /* Table: job 映射联合主键例子: 职位表 */ /*==============================================================*/ create table job( jobNo
6、number(5) not null, jobName varchar2(20) not null, jobDesc varchar2(50), constraint PK_job primary key(jobNo,jobName) --指定复合主键 ) Pojo类 //复合主键类 /** * 复合主键类要求: * 1.implements java.io.Serializable * 2.重写equals hashCode */ public class JobId implement
7、s java.io.Serializable { private Integer jobNo; private String jobName; //重写equals hashCode //equsls 判断两个对象相等条件为jobNo和jobName都相等 @Override public boolean equals(Object other) { if ((this == other)) return true; if ((other == null)) return false; if (!(other instanceof JobId
8、)) return false; JobId jobId = (JobId) other; if(!jobNo.equals(jobId.getJobNo())) return false; if(!jobName.equals(jobId.getJobName())) return false; return true; } @Override public int hashCode() { int result ; result =(jobNo == null ? 0 : jobNo.hashCod
9、e());
result = 37 * result+ (jobName == null ? 0 : jobName.hashCode());
return result;
}
}
Job类
public class Job {
private JobId id; //联合主键类作为成员
private String jobdesc;
}
Job.hbm.xml映射文件
10、
12、例子参见: JobDAOImpl.java JobDAOTest.java Annotation联合主键版本 1. 使用@EmbeddedId注解标示联合主键类成员 @Entity public class Job { private static final long serialVersionUID = -4660865172058580473L; private JobId id; //联合主键类作为成员 并且联合主键类的属性可以使用@Column private String jobdesc; @EmbeddedId public J
13、obId getId() { return this.id; } } 2. 类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id. @Entity @IdClass(JobId.class) public class Job { private static final long serialVersionUID = -4660865172058580473L; private String jobdesc; private Integer jobNo; private String jobName; @Id public Int
14、eger getJobNo() { return jobNo; } @Id public String getJobName() { return jobName; } } SchemaExport hiberante的生成数据库表(及其他ddl)的工具类 可以通过这个工具类完成一些ddl public static void main(String[] args) { Configuration config=new Configuration(); config.configure("hibernate.cfg.xml"); SchemaExport export=new SchemaExport(config); export.create(true, true); //参数1 是否在控制台输出语句 参数2 是否执行ddl }






