Hibernate之对象关系映射基础

来源:互联网 发布:java snmp 应用服务器 编辑:程序博客网 时间:2024/04/28 13:57
 
Hibernate之对象关系映射基础

1.       对象关系映射基础

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

2.       property属性节点的access属性(propertynoopfield

property表示可以通过getXXXsetXXX方法访问

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用来实现自动增长。

SequenceHibernate根据底层数据库的序列来生成标帜符,前提是底层数据库支持序列。

HiloHibernate根据hignlow算法来生成标帜符,Hibernate把特定的字段作为hign值,在默认情况下选用Hibernate_unique_key表的next_hi字段

Native:根据底层数据库对自动生成数据库的支持能力来选择identitysequencehilo

Uuid.hexHibernate采用128位的UUIDUniversal 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 ,可以使用的数据库有OracleDB2SAP DBPostgreSQL

OID必须为long,short,int型,如果将其定义为byte类型,在运行时就会抛出异常。

9.       Hilo标识符生成器

10.   Native标识符生成器

原创粉丝点击