2

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

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

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

有人试过这个吗?

4

3 回答 3

0

以前没有尝试过,但如果我可以建议在 xml/yml 中为您的实体/文档类有不同的映射?

于 2015-03-22T19:34:21.693 回答
0

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

问题可能取决于这两个持久性后端和实体 API 之间的数据同步。例如,如果您有一个 ManyToOne 关联,则 ODM 将具有与 ORM 不同的内部内存引用。因此,它可能会覆盖您正在使用的对象。

于 2012-02-12T14:21:51.893 回答
0

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

首先,我在实体上添加了两个注释:

<?php
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;

/**
 * User
 *
 * @ORM\Entity
 * @ODM\Document
 */
class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ODM\Field()
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=200, nullable=false)
     * @ODM\Field()
     */
    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
于 2016-11-22T23:04:29.987 回答