15

TLDR;Doctrine2:我需要知道是否可以将 Embeddable 中的字段从父实体(或 MappedSuperclass')映射中创建为主键。我已经知道如何从 Embeddable 的映射中设置主键,但这并不理想(参见“长版本”)。

长版; 我正在尝试使用 Doctrine2 Embeddables 为我的实体创建身份值对象。

这是我的问题...

  • 我在一个实体(MyEntity)中有两个不同的 Embeddables(MyEntityId 和 OtherEntityId)。

  • 我希望 MyEntityId 中的一个字段成为 MyEntity 的主键。

  • 由于我在同一个实体中有两个身份嵌入,我想在实体映射文件中定义主键字段,而不是可嵌入映射。

  • 如果我从可嵌入对象中定义主键,当我想对 OtherEntityId 执行相同操作时会遇到问题(因为我在其他地方使用它)。

  • 在 MyEntityId 和 OtherEntityId 中映射主键会导致 MyEntity 具有我不想要的复合键。

这是我目前的映射...

MyEntity:
    embedded:
        MyEntityId:
            class: 'MyEntityId'
            columnPrefix: false
        OtherEntityId:
            class: 'OtherEntityId'
            columnPrefix: false

MyEntityId:
    type: 'embeddable'
        id: 
            id:
                column: 'MyEntityId'
                type: 'string'

OtherEntityId:
    type: 'embeddable'
        id: 
            id:
                column: 'OtherEntityId'
                type: 'string'

解决方案?

  • 创建两个单独的 Embeddables 来表示相同的 Id 值对象(不是很干也不是太复杂)

  • 从实体映射 Embeddable 的主键字段(这可能吗?我在文档中的任何地方都找不到它)

4

1 回答 1

0

根据 Doctrine 2 文档:

Embeddables 只能包含具有基本 @Column 映射的属性。 http://doctrine-orm.readthedocs.org/en/latest/tutorials/embeddables.html

我认为您无法将 @id 属性指定为可嵌入的,只是基本的普通字段,因为它们是某种容器而不是实体。

于 2015-10-30T19:35:44.873 回答