【问题标题】:How to map a component with the Id in Hibernate?如何在 Hibernate 中使用 Id 映射组件?
【发布时间】:2011-02-16 17:44:40
【问题描述】:

我正在尝试映射我公司的业务对象(xml 不是注释),它们具有以下一般结构:

ObjectDetail        (main table)
    ObjectSummary   (main table)
        objectId
    otherStuffInMainTable
    otherStuffInOtherTables

我知道如何使用简单的 Id 映射 Summary,并且我知道如何将 Summary 对象映射为 Detail 对象的一个​​组件,但我不知道如何告诉 Detail 对象它的 Id 在零件。 Hib Docs 中有很多关于可嵌入 ID 的信息,但都是关于多列键的。我有一个简单的 Id,但我不想使用他们建议的语法,因为只有 Summary 中的 Id 是表键,而不是整个 Summary 对象。

有没有我刚刚错过的最佳实践,或者有什么好的想法?

【问题讨论】:

    标签: java hibernate hibernate-mapping


    【解决方案1】:

    如果 ObjectSummary.objectId 也是 ObjectDetail 的 id,则它们应映射到单个表。在这种情况下,ObjectSummary 不能是一个实体,其“生命周期”独立于ObjectDetail

    您可以将ObjectSummary 标记为可嵌入实体。 ObjectDetail 将有一个嵌入 ObjectSummary 的属性。查看有关embeddable objects 部分的文档。

    【讨论】:

    • 谢谢,objectId 确实是两个对象的 ID。而且我确实需要独立访问它们(我需要查询摘要,尽管我不需要更新它们)。但是您实际上并没有回答我的问题:我知道组件/嵌入式对象,但是 Hibernate 要求 ObjectDetail 有一个 Id,而 Id 是 ObjectSummary 中的单个字段。有一个注释 EmbeddableId 看起来是正确的想法,但这使得整个 ObjectSummary 成为 Id,我只希望 ObjectSummary 中的一个简单 Integer 成为关键。谢谢!
    • 这个问题已经失效,但没有其他答案,我可以看到这是处理摘要和详细信息单独查询的一种方式,所以我接受了。
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2011-05-18
    • 2020-06-02
    • 2013-12-01
    • 2015-10-24
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多