2

注釈を使用して同じクラスを ORM と ODM の両方にマップすることは可能ですか?

何を使用するかを決定しているので、パフォーマンスの測定を行いたいと考えています。また、永続化マッパーを簡単に切り替えられるようにしたいと考えています。マネージャーの統合はすでに行っていますが、今度はクラスを統合したいと考えています。今、エンティティとドキュメントの別々の名前空間に各クラスのコピーがあり、これは冗長だと思います。

私はこの記事http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/cookbook/mapping-classes-to-orm-and-odm.htmlを読みましたが、最終的には2つの異なるものを使用していると思いますクラスは、それぞれ独自の名前空間にあります。

誰もこれを試しましたか?

4

3 に答える 3

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 です。そのため、同時にドキュメントである必要があるエンティティがある場合は、2 つのマッピングのいずれかを手動で構成する必要があります。

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 に答える
0

試したことはありませんが、ODM と ORM の両方のマッピングをまったく同じクラスに配置することは完全に可能です。

この問題は、これら 2 つの永続化バックエンドとエンティティ API 間のデータの同期に依存している可能性があります。たとえば、ManyToOne アソシエーションがある場合、ODM は ORM とは異なる内部メモリ参照を持ちます。そのため、作業していたオブジェクトをオーバーライドする可能性があります。

于 2012-02-12T14:21:51.893 に答える
0

以前にこれを試したことはありませんでしたが、エンティティ/ドキュメント クラスの xml/yml で異なるマッピングを使用することをお勧めできますか?

于 2015-03-22T19:34:21.693 に答える