Hibernate学习笔记(四)

心得:
    一,hibernate关心的永远只是一个一个属性,而不是数据库当中的表。这也就是为什么inverse属性不放在多一方Item的时候,数据库更新的是Bid所代表的那张表。因为一旦建立了这种联系关系。Item和Bid有联系,在数据库当中,都是维护着Bid当中关于Item的外键。
     但是数据库中的表和OO有着一些格格不入。因为OO对象与对象之间的关系是指针。比如书中的例子,一个Item,指向n个Bid。在java的世界里。有多少个Bag和Item。就会产生多少个对象。他们直接互相的指针标示着他们的关系。
     但是在数据库中,则是完全另一幅景象。数据库中,对象与对象的关系通过的是通过外键来形成的。代表一个对象的一条记录有着另一个对象的记录的时候,就表示两个对象之间建立了联系。
     Hibernate在处理这种关系的时候,往往会把这表示联系的关系外键放在一得一方。one-to-one是联合主键。而many-to-one则是把外键放在了one的一方。这点起初让我很混淆。因为方向也好,真的让我很糊涂。

双向和单向
     这个概念可能有点困扰。因为在hibernate中,只要在类当中有着链接。那么一定一个找到另一个。比如说例子中的bid和item,item中的bid是map或者set存放,那么通过item,一定能够找到相应的bid。只是单向的导航只是无法确定或者说必须先获得整体的包含bid的map,然后通过代码进行查找特定的bid。而双向的可以直接找到相应的bid。
     所以来说,如果说需要双向导航,在表示两者这件一对多或者多对一的关系的时候,只能使用<idbag>,<list>和<map>这样的标签。因为这些标签使得在多端,会产生一个和一端相关,和多端无关的标识。而set,bag这种标签,则不会有这种东西

<mang-to-one>之类的标签
      开始的时候,我对于这些标签和迷惑。不知道其到底有着什么特别的作用。
      慢慢的,明白了这只是一个代表着一个类中的属性。和property之类的标签有着一样作用的。表示这个属性对应着何种的值。只是有了这个标签,就告诉了Hibernate。这个属性和其他的属性不一样。不能够单独存在。其和其他类有着特殊的关系。
 
<many>端的unique
      首先,从hibernate来说,其处理的是OR映射框架。而在操作层上面,其关心的只有在类当中的属性。在hibernate内部,只有属性和表中的关系应该是多对多的关系。但是从属性一端来理解hibernate的映射,将会是比较方便的方法。
      所以来说,如果many一端设置了unique,就等于把这一端设定成了one端。因为属性对应的字段为唯一,那么一切就好办很多。

<many-to-many>标签
     其实这个标签和上面的标签没什么本质上很大的区别。也是一种映射的表示。
     至于中间件的处理,如果简单点,就是一个类的映射。当然复杂一点,就要深入讨论了。这里就不展开了。

继承
     这里的继承的与前面不同的是外部调用多态的实现。很简单,就好像组件的组装了。
     当然有一点复杂,但是书上也说了。这个复杂的东西被用的概率很少很少。所以我就知道,解决这些问题是通过一个叫做<any>的标签。

你可能感兴趣的:(Hibernate,框架,中间件,OO)