JavaPersistenceWithHibernate读书笔记(3)

探讨Java与SQL世界中对象持久化所面临的三大挑战:子类型问题、多态关联及查询、身份识别问题。文章深入分析了如何在数据库中映射类层次结构,并讨论了Java对象身份与SQL主键之间的复杂关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值