初学Hibernate映射机制的学习笔记
初学hibernate,做了下面的一些笔记和思考心得。
Hibernate映射机制01
一、Hibernate的主键映射
1.在Hibernate的应用方案中,极力推荐使用代理主键(充当主键的字段本身不具有业务含义,只起主键作用)。
2.在Hibernate的应用中,Hibernate依靠对象标识符(OID)来区分不同的持久化对象(区分不同的java类?),而对象标识符(OID)则可以通过Hibernate内置的标识生成器来产生。比如assinged,OID由业务逻辑程序负责产生,Hibernate只是负责持久化,也就是说我们自己在业务逻辑程序中指出主键。OID由底层数据库的自增主键生成机制产生,也就是我们在业务逻辑类中不需要去设置主键。
Hibernate实体映射的主要任务就是实现数据库关系表与持久化类之间的映射。而对于开发人员而言,实体映射的主要工作就是ORM映射文件的编写。我们可以使用MyEclipse的DatabaseExplorer来连接数据库并对相应的表,使用HibernateReverseEngineering选项来逆向生成持久化类。
3.映射一对一的关联关系。有两种映射实体一对一的关联关系的实现方式。共享主键和唯一外键方式,a.共享主键方式<one-to-one name ="login" class = "com.ORM.Login" cascade ="all" lazy = "false" outer-join ="true">这里的name代表属性的名字,class代表这个属性所映射的具体的表的位置,cascade代表级联关系,即cascade属性的可能值有all: 所有情况下均进行关联操作,即save-update和delete。none: 所有情况下均不进行关联操作。这是默认值。 save-update: 在执行save/update/saveOrUpdate时进行关联操作。delete: 在执行delete 时进行关联操作。all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点。比如在一个一对多的关系中,Student包含多个book,当在对象关系中删除一个book时,此book即成为孤儿节点。这个lazy代表迟延加载,outer-join代表外连接。我们可以理解共享主键方式为两个表拥有一个同样的键。
b.唯一外键方式就是一个表的外键和另一个表的唯一主键对应形成一对一映射关系。
4.映射多对一单向关联关系(或者我们叫它一对多单向关联关系),通过外键的参照来实现。我们就在这个“多”的配置文件中编写<many-to-one name ="customer" column = "CUSTOMRER_ID" class = "com.ORM.Customer" lazy ="false" not-null ="true">这个column代表的是当前配置文件所指的持久化类所代表的数据库表的列,而不是你要映射到的另一个持久化类。lazy是延迟话加载。如果为false的话就代表立即加载。而not-null表示其不会空。也就是说我们只在一个多对一中的“多”的映射文件
配置,而在“一”中不配置。
5.映射一对多双向关联关系。不同与一对多的单向联系,在一对多的双相联系中的“一”的映射文件中也要编写相应的配置文件。
比如在“一”中的映射文件中:有一个订单集,<set name = "orders" cascade = "all" lazy = "false" inverse ="true"><key column = "CUSTOMER_ID"/><one-to-many class ="com.ORM.Customer"></set>inverse 代表级联的控制方向,false为主控方负责级联的维护,true是被控方负责级联的维护。这个set代表持久化类中有一个名为orders的set类型的属性。在持久化类中,我们在“一”中使用一个set属性,来反映这种一对多的联系。
6.映射一对多双向自身关联关系。两个关联关系都配置在一起。在持久化类中,我们就是使用一个属性反映这个“一”,用一个set类型的属性反映这个”多“。在映射化文件中通过一个<many-to-one>表示子类到父类的多对一关联,用一个<set>来表示父类到子类的一对多关联。
7.映射多对多单向关联关系。使用连接表来实现多对多,在代表“多”的持久化类中,我们使用一个set类型的属性来反映这种多对多的单向关联,在配置文件中的“多”中使用:<set name = "items" table = "selecteditems" lazy ="true" cascade ="save-update" ><key column = "ORDERID"/><many-to-many class ="com.ORM.Items" column = "ITEMID"/></set>
这里的key代表的连接表中的外键,就是表Items中的外键。即关联里面的标识符字段。而在配置文件中的“一”中就不配置。
8.在映射多对多的双向关联关系,在两个持久化类中使用set属性。在两个配置文件中就要对两方面都进行配置。