Hibernate之对象关系映射基础

1.       对象关系映射基础
1)当Hibernate的Session在执行save(arg0)、update(arg0)或saveOrUpdate(arg0)方法时,会调用getXXX()方法,当Session在执行get()、load()和find()方法时会调用相应对象的setXXX(arg0)方法。另外,Hibernate可以访问任意权限级别的Hibernate方法,即便他是private类型的。


2.       property属性节点的access属性(property、noop和field)
property表示可以通过getXXX、setXXX方法访问
noop仅仅可以通过HQL来获取其值,其他方式均无效
field通过field域来进行访问
说明:如果在映射文件中存在property属性节点,但是在相应的持久化类中没有与之对应的属性,你仍然可以在HQL中访问,但是如果持久化类中的某些属性没有在映射文件中进行映射,那么就不可以通过HQL进行访问。


3.       带有业务属性的字段一般不会用来作为主键(自然主键),因为,当一旦出现允许出现客户重名的业务时,就必须修改数据模型,重新定义表的主键,给数据库的维护增加了难度。因此,更加合理的解决方案是使用代理主键,即不具备业务含义的字段,代理主键一般为整数类型,比字符串类型要节省更多的数据库空间。


4.       用OID(对象标志符)来区分对象,OID是代理主键在Java对象模型中的等价物
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event persistentInstance=(Event)session.load(Event.class,Long.parseLong("27"));
System.out.println(persistentInstance.getTitle());
Hibernate在取出对象时做一个判读,如果OID与缓存中的OID相同,则直接将其引用返回出去而不会进行重复创建。


5.       Hibernate的几种内置标帜符生成器
Increment:以递增的方式生成标帜符,步长为1.
Identity:由底层数据库生成标帜符,前提是底层数据库支持自动增长类型,如果数据库是Oracle数据库,则Hibernate会自动创建一个Sequence用来实现自动增长。
Sequence:Hibernate根据底层数据库的序列来生成标帜符,前提是底层数据库支持序列。
Hilo:Hibernate根据hign、low算法来生成标帜符,Hibernate把特定的字段作为hign值,在默认情况下选用Hibernate_unique_key表的next_hi字段
Native:根据底层数据库对自动生成数据库的支持能力来选择identity、sequence和hilo。
Uuid.hex:Hibernate采用128位的UUID(Universal Unique Identification)算法来生成标帜符。UUID能在网络环境中生成唯一的字符串标识符。这种标识符生成策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间
Assigned:由Java应用 程序负责生成自然主键,但此时的setId方法不可以设置为private。


6.       Increment标识符生成器:
由于Increment生成标识符的机制不依赖于底层数据库,因此适合于所有数据库系统。
适用于只有单个Hibernate进程访问同一个数据库的场合,在集群环境下不推荐使用。
OID必须为long,short,int型,如果将其定义为byte类型,在运行时就会抛出异常。


7.       Identity标识符生成器:
要求底层数据库必须支持自动增长字段类型,包括:DB2, MYSQL, MSSQL, SYBASE, HSQLDB, INFORMIX。
OID必须为long,short,int型,如果将其定义为byte类型,在运行时就会抛出异常。


8.       Sequence标识符生成器:
<generator class="sequence">
    <param name="sequence">HIBERNATE_SEQ_PERSON</param>
</generator>
       也可以不明确指出具体使用哪个sequence ,Hibernate在进行初始化时如果碰到没有指定sequence 的对象-映射文件会自动产生一个默认的sequence 。
使用此项的前提是数据库支持sequence ,可以使用的数据库有Oracle,DB2,SAP DB和PostgreSQL。
OID必须为long,short,int型,如果将其定义为byte类型,在运行时就会抛出异常。


9.       Hilo标识符生成器


10.   Native标识符生成器

你可能感兴趣的:(oracle,Hibernate,算法,db2,Sybase)