原则2 ORM和MongoDB ODM映射在同一个类上



是否可以使用注释将同一个类映射到ORM和ODM ?

我们正在决定使用什么,所以我们想要做一些性能测量,我们也希望能够轻松地切换持久化映射器。我已经统一了经理,现在我想统一类。现在我在实体和文档的单独命名空间中有每个类的副本,我觉得有点多余。

我读了这篇文章http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/cookbook/mapping-classes-to-orm-and-odm.html,但最后我猜他们使用了两个不同的类,每个类都在自己的命名空间中。

有人试过吗?

我从未尝试过,但完全有可能将ODM和ORM映射放在完全相同的类上。

问题可能依赖于这两个持久化后端之间的数据同步和实体API。例如,如果您有一个ManyToOne关联,ODM将有一个不同于ORM的内部内存引用。所以它有可能会覆盖你正在使用的对象。

之前没有尝试过,但如果我能建议一些东西是在xml/yml中为您的实体/文档类有不同的映射?

可以。我已经使用symfony和注释完成了它,所以我想你可以使用任何你正在使用的环境来管理它。

首先,我在实体上添加了两个注释:
<?php
use DoctrineORMMapping as ORM;
use DoctrineODMMongoDBMappingAnnotations as ODM;
/**
 * User
 *
 * @ORMEntity
 * @ODMDocument
 */
class User
{
    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer", nullable=false)
     * @ORMId
     * @ODMField()
     */
    private $id;
    /**
     * @var string
     *
     * @ORMColumn(name="email", type="string", length=200, nullable=false)
     * @ODMField()
     */
    private $email;
}

在symfony下,ORM的默认目录是Entity目录,ODM的默认目录是Document目录。因此,如果您有一个必须同时是文档的实体,则必须手动配置这两个映射中的任意一个。

doctrine_mongodb:
    document_managers:
        default:
            mappings:
                # Default mapping for the bundle (loads Document/)
                DemoBundle: ~
                # Extra mapping to load document mappings under Entity/
                DualMappingHack:
                    type: annotation
                    dir: %kernel.root_dir%/../src/Acme/DemoBundle/Entity
                    prefix: EntityPrefix
                    is_bundle: false

相关内容

  • 没有找到相关文章

最新更新