`

JavaPersistenceWithHibernate读书笔记(3)

阅读更多
1.2.2 The problem of subtypes
    Java world: parent class and child class. 父类和子类.
    Sql world:  要是有supertables和subtables就好了,那样我们就可以在新建一个表时从一个父表中继承来一些列,可是RDBMS里并没有提供这种机制.

    对于如何来沟通这两个世界里的就subtypes这方面的联系,本书将在第五章第一节的"Mapping class inheritance"里展开讨论.在那一节我们将深入讨论如何将一个class hierarchy persist进到数据库或表中.

    但关于subtypes的问题还没完,我们将得处理继承中带来的多态问题.
    
          在我们的e-commerce例子中,User有一个指向BillingDetails的关联关系,而这个BillingDetails是一个父类,这个关联关系也就是一种多态性质的关联.在运行时,User对象真正指向的可以是任意的子类.
    跟这个相关的一个问题是,    我们也需要针对BillingDetails这个父类做出那种多态性质的查询,从而查出其所有的子类.
    
    而对于这样的多态查询,SQL世界里也没有可用的措施支持.
 
    第五章里将要讨论的三种关于继承的映射方案可以帮我们来描述这种多态的关联关系与相关的多态查询.

    
1.2.3 The problem of identity
    在Java与SQL两个World里,一共有三种方式来处理与identity相关的问题.
    
    Java world:
        1,Object identity(可以粗略地理解成内存位置的比较,用a==b这样的等式来check)
        2,用Java里equals方法来判断.
    SQL world:
        primary key.
    不过,第九章里我们会看到,Java里的那两种方式都不能与primary key有等效的功能.
    实际应用中,我们会经常见到很多nonidentical的对象来同时代表数据库里同一行信息,多线程的应用就是一个很明显的例子.再进一步说,为一个persistent class覆盖Object的equals()方法时,也有一些难以处理的注意点.
    
    UserName or UserID? --> surrogate keys -->USER_ID and BILLING_DETAILS_ID columns contain system-generated values.这两行的引入纯粹是为了DataModel层的方便,而与Java端没任何关系.那在Java的DomainModel层,我们又怎么来描述这样的列呢?我们将在 “Mapping entities with identity”一节中讨论这个问题.
    再深一步,在整个Persistence环境中,identity与系统中的缓存和事务管理紧密关联在一起的.我们将在第10章与第13章来讨论这个问题.
 
    how the relationships between our classes are mapped and handled. Is the foreign key in the database all you need?
    
    -->1.2.4 Problems relating to associations
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics