"Class is not a valid entity..." EntityManager#getClassMetadata(...) 的错误



我正在尝试编写一个测试用例以将其发布在 Doctrine 的 GitHub 页面上,并且在生成模式时遇到问题。电话会议

$this->_em->getClassMetadata(Server::class)

导致异常

类"Doctrine\Tests\Models\DDC6786\Server"不是有效的实体或映射的超类。

我做错了什么?/如何让它工作?

法典

DDC6786Test

namespace DoctrineTestsORMFunctionalTicket;
use DoctrineTestsModelsDDC6786Endpoint;
use DoctrineTestsModelsDDC6786EndpointServerConfig;
use DoctrineTestsModelsDDC6786Server;
use DoctrineTestsOrmFunctionalTestCase;
class DDC6786Test extends OrmFunctionalTestCase
{
    public function testIssue()
    {
        $this->assertTrue(true);
    }
    public function setUp()
    {
        parent::setUp();
        try {
            $this->_schemaTool->createSchema(
                [
                    $this->_em->getClassMetadata(Server::class),
                    $this->_em->getClassMetadata(EndpointServerConfig::class),
                    $this->_em->getClassMetadata(Endpoint::class),
                ]
            );
        } catch(Exception $e) {
            $breakpoint = null;
        }
    }
}

Endpoint

namespace DoctrineTestsModelsDDC6786;
use DoctrineORMMapping as ORM;
use ReflectionClass;
/**
 * Endpoint
 *
 * @ORMTable(name="endpoint")
 * @ORMEntity
 */
class Endpoint
{
    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer", nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy="IDENTITY")
     */
    protected $id;
    /**
     * @var string
     *
     * @ORMColumn(name="role", type="string", nullable=true)
     */
    protected $role;
    /**
     * @var string
     *
     * @ORMColumn(name="server_place", type="string", nullable=true)
     *
     * @Groups({"export"})
     */
    protected $serverPlace;
    /**
     * @var string
     *
     * @ORMColumn(name="contact_person", type="string", length=500, nullable=true)
     *
     * @Groups({"export"})
     */
    protected $contactPerson;
    /**
     * @var DateTime
     *
     * @ORMColumn(name="created", type="datetime", nullable=false)
     */
    protected $created;
    /**
     * @var DateTime
     *
     * @ORMColumn(name="updated", type="datetime", nullable=true)
     */
    protected $updated;
    /**
     * @var EndpointServerConfig
     *
     * @ORMOneToOne(targetEntity="EndpointServerConfig", inversedBy="endpoint", cascade={"persist"})
     * @ORMJoinColumns({
     *   @ORMJoinColumn(name="endpoint_server_config_id", referencedColumnName="id")
     * })
     *
     * @Groups({"export"})
     */
    protected $endpointServerConfig;
    /**
     * @param integer $id
     *
     * @return Endpoint
     */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }
    /**
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * @param string $role
     *
     * @return Endpoint
     */
    public function setRole($role)
    {
        $this->role = $role;
        return $this;
    }
    /**
     * @return string
     */
    public function getRole()
    {
        return $this->role;
    }
    /**
     * @param string $type
     *
     * @return Endpoint
     */
    public function setType($type)
    {
        $this->type = $type;
        return $this;
    }
    /**
     * @return string
     *
     * @Groups({"export"})
     */
    public function getType()
    {
        return str_replace(
            'Endpoint',
            '',
            (new ReflectionClass($this))->getShortName()
        );
    }
    /**
     * @param string $serverPlace
     *
     * @return Endpoint
     */
    public function setServerPlace($serverPlace)
    {
        $this->serverPlace = $serverPlace;
        return $this;
    }
    /**
     * @return string
     */
    public function getServerPlace()
    {
        return $this->serverPlace;
    }
    /**
     * @param string $contactPerson
     *
     * @return Endpoint
     */
    public function setContactPerson($contactPerson)
    {
        $this->contactPerson = $contactPerson;
        return $this;
    }
    /**
     * @return string
     */
    public function getContactPerson()
    {
        return $this->contactPerson;
    }
    /**
     * @param DateTime $created
     *
     * @return Endpoint
     */
    public function setCreated($created)
    {
        $this->created = $created;
        return $this;
    }
    /**
     * @return DateTime
     */
    public function getCreated()
    {
        return $this->created;
    }
    /**
     * @param DateTime $updated
     *
     * @return Endpoint
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;
        return $this;
    }
    /**
     * @return DateTime
     */
    public function getUpdated()
    {
        return $this->updated;
    }
    /**
     * @param EndpointServerConfig $endpointServerConfig
     *
     * @return Endpoint
     */
    public function setEndpointServerConfig(EndpointServerConfig $endpointServerConfig = null)
    {
        $this->endpointServerConfig = $endpointServerConfig;
        return $this;
    }
    /**
     * @return EndpointServerConfig
     */
    public function getEndpointServerConfig()
    {
        return $this->endpointServerConfig;
    }
}

EndpointServerConfig

namespace DoctrineTestsModelsDDC6786;
use DoctrineORMMapping as ORM;
/**
 * EndpointServerConfig
 *
 * @ORMTable(name="endpoint_server_config", indexes={
 *     @ORMIndex(name="fk_endpoint_server_config_server_idx", columns={"server_name"})}
 * )
 * @ORMEntity
 */
class EndpointServerConfig
{
    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer", nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy="IDENTITY")
     */
    protected $id;
    /**
     * @var string
     *
     * @ORMColumn(name="dns_address", type="string", length=253, nullable=true)
     */
    protected $dnsAddress;
    /**
     * @var Server
     *
     * @ORMManyToOne(targetEntity="Server")
     * @ORMJoinColumns({
     *   @ORMJoinColumn(name="server_name", referencedColumnName="name")
     * })
     */
    protected $server;
    /**
     * @var Endpoint
     *
     * @ORMOneToOne(targetEntity="Endpoint", mappedBy="endpointServerConfig")
     */
    protected $endpoint;
    /**
     * @param integer $id
     *
     * @return EndpointServerConfig
     */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }
    /**
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * @param string $dnsAddress
     *
     * @return EndpointServerConfig
     */
    public function setDnsAddress($dnsAddress)
    {
        $this->dnsAddress = $dnsAddress;
        return $this;
    }
    /**
     * @return string
     */
    public function getDnsAddress()
    {
        return $this->dnsAddress;
    }
    /**
     * @param Server $server
     *
     * @return EndpointServerConfig
     */
    public function setServer(Server $server = null)
    {
        if(! $server || ! $server->getName()) {
            $server = null;
        }
        $this->server = $server;
        return $this;
    }
    /**
     * @return Server
     */
    public function getServer()
    {
        return $this->server;
    }
    /**
     * @param Endpoint $endpoint
     *
     * @return EndpointServerConfig
     */
    public function setEndpoint($endpoint)
    {
        $this->endpoint = $endpoint;
        return $this;
    }
    /**
     * @return Endpoint
     */
    public function getEndpoint()
    {
        return $this->endpoint;
    }
}

Server

namespace DoctrineTestsModelsDDC6786;
use DoctrineORMMapping as ORM;
/**
 * Server
 *
 * @ORMTable(name="server")
 * @ORMEntity
 *
 * @author automatix
 */
class Server
{
    /**
     * @var string
     *
     * @ORMColumn(name="name", type="string", length=32, nullable=false)
     * @ORMId
     * @ORMGeneratedValue(strategy="NONE")
     */
    protected $name;
    /**
     * @var boolean
     *
     * @ORMColumn(name="active", type="boolean", nullable=true)
     */
    protected $active;
    /**
     * @var DateTime
     *
     * @ORMColumn(name="updated", type="datetime", nullable=true)
     */
    protected $updated;
    /**
     * @var string
     *
     * @ORMColumn(name="node_name", type="string", length=50, nullable=true)
     */
    protected $nodeName;
    /**
     * @var string
     *
     * @ORMColumn(name="virtual_node_name", type="string", length=50, nullable=true)
     */
    protected $virtualNodeName;
    /**
     * Not relevant for ORM. Should become obsolete after and be removed after the migration to Doctrine.
     *
     * @var EndpointServerConfig[]
     */
    protected $endpointServerConfigs;
    /**
     * @param string $name
     *
     * @return Server
     */
    public function setName($name)
    {
        $this->name = $name;
        return $this;
    }
    /**
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }
    /**
     * @param boolean $active
     *
     * @return Server
     */
    public function setActive($active)
    {
        $this->active = $active;
        return $this;
    }
    /**
     * @return boolean
     */
    public function getActive()
    {
        return $this->active;
    }
    /**
     * @param DateTime $updated
     *
     * @return Server
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;
        return $this;
    }
    /**
     * @return DateTime
     */
    public function getUpdated()
    {
        return $this->updated;
    }
    /**
     * @param string $nodeName
     *
     * @return Server
     */
    public function setNodeName($nodeName)
    {
        $this->nodeName = $nodeName;
        return $this;
    }
    /**
     * @return string
     */
    public function getNodeName()
    {
        return $this->nodeName;
    }
    /**
     * @param string $virtualNodeName
     *
     * @return Server
     */
    public function setVirtualNodeName($virtualNodeName)
    {
        $this->virtualNodeName = $virtualNodeName;
        return $this;
    }
    /**
     * @return string
     */
    public function getVirtualNodeName()
    {
        return $this->virtualNodeName;
    }
    /**
     * @param EndpointServerConfig[] $endpointServerConfigs
     *
     * @return Server
     */
    public function setEndpointServerConfigs($endpointServerConfigs)
    {
        $this->endpointServerConfigs = $endpointServerConfigs;
        return $this;
    }
    /**
     * @return EndpointServerConfig[] $endpointServerConfigs
     */
    public function getEndpointServerConfigs()
    {
        return $this->endpointServerConfigs;
    }
}

问题是由注释引起的。 use DoctrineORMMapping as ORM;@ORMEntity不起作用,但只有@ORMEntity(以及@ORMTable等)起作用。

最新更新