浅谈Hibernate之映射对象标示符(OID)

1.数据库用主键作为记录的唯一标识

   自然主键:将含有业务含义的字段作为主键
  代理主键:不具备业务含义的字段作为主键
 
  自动生成代理主键:
  (1)把主键定义为自动增长标识符
  (2)从序列中获取自动增长的标识符
  
2.Java对象依据内存地址区分对象
   判断方式有两种:
  (1)通过“==”号来判断
  (2)通过.eqauls()方法来判断
  注:equals()方法可以重写,例如String类重来判断内容相同即为同一对象
 
3.Hibernate根据OID区分对象
   Customer c1 = (Customer)session.get(Customer.class, new Long(1));
  Hibernate根据OID=1查找数据库为1的记录,保存成Customer类型放到session缓存中
  如果再次查找OID=1的信息,则直接从session中获取
  通常是由Hibernate和底层数据库给OID赋值,所以setId()应设置为private权限
 
Hibernate内置标识符生成器:
increment:适用于代理主键,由Hibernate生成,每次自增1
indentity:适用于代理主键,由底层数据库生成,前提是数据库必须支持自增
sequence :适用于代理主键,由底层数据库生成,前提是数据库必须支持序列
hilo     :适用于代理主键
native   :适用于代理主键,自适应底层数据库生成标示符方式
uuid.hex :适用于代理主键,Hibernate采用128位UUID算法生成
assigned :适用于自然主键,由Java程序生成,而且不能将setId设置为private权限,(避免使用)
select   :适用于遗留数据库中的代理主键或自然主键,由数据库的触发器生成
foreign  :用另一个关联的对象的标识符作为当前对象标识符,适用于一对一关联关系
 

猜你喜欢

转载自graffitoscholar.iteye.com/blog/2054277