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 :用另一个关联的对象的标识符作为当前对象标识符,适用于一对一关联关系