1。2。1。 第一个class
我们的第一个耐久化类是一个带有一些属性(property)的简单JavaBean类:
package events;
import java。util。Date;
public class Event {
private Long id;
private String title;
private Date date;
public Event() {}
public Long getId() {
return id;
private void setId(Long id) {
this。
id = id;
public Date getDate() {
return date;
public void setDate(Date date) {
this。
date = date;
public String getTitle() {
return title;
public void setTitle(String title) {
this。
title = title;
你能够看到那个类对属性的存取办法(getter and setter method)利用了原则JavaBean定名约定,同时把类属性(field)的拜候级别设成私有的(private)。那是选举的设想,但并非必需的。
Hibernate也能够间接拜候那些field,而利用拜候办法(accessor method)的益处是供给了重构时的强健性(robustness)。为了通过反射机造(Reflection)来实例化那个类的对象,我们需要供给一个无参的构造器(no-argument constructor)。
对一特定的event, id 属性持有独一的标识符(identifier)的值。假设我们期看利用Hibernate供给的所有特征,那么所有的耐久化实体(persistent entity)类(那里也包罗一些次要依靠类)都需要一个如许的标识符属性。
而事实上,大大都利用法式(特殊是web利用法式)都需要通过标识符来区别对象,所以你应该考虑利用标识符属性而不是把它当做一种限造。然而,我们凡是不会操做对象的标识(identity),因而它的setter办法的拜候级别应该声明private。如许当对象被保留的时候,只要Hibernate能够为它分配标识符值。
你可看到Hibernate能够间接拜候public,private和protected的拜候办法和field。所以抉择哪种体例完全取决于你,你能够使你的抉择与你的利用法式设想相吻合。
所有的耐久化类(persistent classes)都要求有无参的构造器,因为Hibernate必需利用Java反射机造来为你创建对象。
构造器(constructor)的拜候级别能够是private,然而当生成运行时代办署理(runtime proxy)的时候则要求利用至少是package 级此外拜候掌握,如许在没有字节码指令(bytecode instrumentation)的情状下,从耐久化类里获取数据会更有效率。
把那个Java源代码文件放到开发目次下的src目次里,重视包位置要准确。 如今那个目次看起来应该像如许:
+lib
+src
+events
Event。java
下一步,我们把那个耐久化类的信息告诉Hibernate。
1。2。2。 映射文件
Hibernate需要晓得如何往加载(load)和存储(store)耐久化类的对象。那恰是Hibernate映射文件发扬感化的处所。映射文件告诉Hibernate它,应该拜候数据库(database)里面的哪个表(table)及应该利用内外面的哪些字段(column)。
一个映射文件的根本构造看起来像如许:
重视Hibernate的DTD长短常复杂的。你的编纂器或者IDE里利用它来主动完成那些用来映射的XML元素(element)和属性(attribute)。你也能够在文本编纂器里翻开DTD-那是最简单的体例来概览所有的元素和attribute,并查看它们的缺省值以及正文。
重视Hibernate不会从web加载DTD文件,但它会起首在利用法式的classpath中查找。DTD文件已包罗在hibernate3。jar里,同时也在Hibernate发布包的src/目次下。
为缩短代码长度,在以后的例子里我们会省略DTD的声明。
当然,在现实的利用法式中,DTD声明是必需的。
在hibernate-mapping标签(tag)之间, 含有一个class元素。所有的耐久化实体类(再次声明,或许接下来会有依靠类,就是那些次要的实体)都需要一个如许的映射,来把类对象映射到SQL数据库里的表。
到目前为行,我们告诉了Hibernate如何把Events类的对象耐久化到数据库的EVENTS内外,以及如何从EVENTS表加载到Events类的对象。每个实例对应着数据库表中的一行。如今我们将陆续讨论有关独一标识符属性到数据库表的映射。
别的,因为我们不关心如何处置那个标识符,我们就设置装备摆设由Hibernate的标识符生成战略来产生代办署理主键字段。
id元素是标识符属性的声明,name="id" 声了然Java属性的名字 - Hibernate会利用getId()和setId()来拜候它。
column属性则告诉Hibernate, 我们利用EVENTS表的哪个字段做为主键。嵌套的generator元素指定了标识符生成战略,在那里我们指定native,它根据已设置装备摆设的数据库(方言)主动抉择更佳的标识符生成战略。Hibernate撑持由数据库生成,全局独一性(globally unique)和利用法式指定(或者你本身为任何已有战略所写的扩展)那些战略来生成标识符。