2011-10-10 5 views
2

주석을 사용하여 ORM과 ODM 모두에 동일한 클래스를 매핑 할 수 있습니까?Doctrine 2 동일한 클래스의 ORM과 MongoDB ODM 매핑

우리는 무엇을 사용해야하는지 결정하기 때문에 성능 측정을하고 싶습니다. 또한 persistance 매퍼를 쉽게 전환 할 수 있기를 원합니다. 나는 이미 관리자 통일을 마쳤습니다. 이제 수업을 통일하고 싶습니다. 이제 엔티티와 문서를위한 별도의 네임 스페이스에 각 클래스의 복사본을 가지고 있습니다.

나는이 기사 http://www.doctrine-project.org/docs/mongodb_odm/1.0/en/cookbook/mapping-classes-to-orm-and-odm.html을 읽었지 만 결국에는 그들 자신의 네임 스페이스에서 각각 두 개의 다른 클래스를 사용한다고 생각한다.

아무도 이것을 시도한 적이 있습니까?

답변

0

필자는 한번도 시도한 적이 없지만 정확히 같은 클래스에 ODM과 ORM 매핑을 넣을 수 있습니다.

문제는이 두 지속성 백엔드 과 Entity API 간의 데이터 동기화에 의존 할 것입니다. 예를 들어, ManyToOne 연관이있는 경우 ODM은 ORM과는 다른 내부 메모리 참조를 갖습니다. 따라서 작업중인 객체를 덮어 쓸 가능성이 있습니다.

0

이전에 시도하지 않았지만 내가 뭔가를 제안 할 수있는 경우 엔 XML/yml에서 엔티티/문서 클래스에 다른 매핑이 필요합니까?

0

가능합니다. 심포니와 주석을 사용하여 작업을 수행 했으므로 사용중인 환경을 사용하여 관리 할 수 ​​있습니다.

첫째, 기업 모두에 주석을 추가 :

<?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; 
} 

심포니에서 ORM에 대한 기본 디렉토리가 기본 디렉토리 문서입니다 ODM의 엔티티 디렉토리입니다. 따라서 문서가 동시에 있어야하는 엔티티가있는 경우 두 매핑 중 하나를 수동으로 구성해야합니다.

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