如果你使用过CMP2.0/2.1的话,那么你一定会熟悉管理的关联的概念。CMP关联被称作容器管理的关联。在CMP中的关联都是双向的:关联的一端发生变化,一定也会在关联的另外一端产生反应。举例来说,如果我们调用bid.setItem(item)方法,那么容器会自动调用item.getBids().add(item)。
透明的面向POJO的持久化实现(如Hibernate)并没有实现可管理的关联。与CMR相反,Hibernate中的关联不具有方向性。在Hibernate中,从Bid到Item的关联和Item到Bid的关联是不属于同一个关联关系的。
对于一些人来说,这看起来有点奇怪;而对于另外一些人来说,这十分自然。毕竟,在Java中关联并不具有方向性,而Hibernate面向的是无格式的Java对象。做出这样的决定是由于Hibernate中的对象并不像实体Bean那样是处于容器的管理下。在Hibernate中,持久化的对象和普通对象的行为并没有什么不同。
因为关联是如此的重要,我们需要一种精确的语言来描述它们。