类“AppBundle\Entity\Organization”不是有效的实体或映射的超类
Posted
技术标签:
【中文标题】类“AppBundle\\Entity\\Organization”不是有效的实体或映射的超类【英文标题】:Class "AppBundle\Entity\Organization" is not a valid entity or mapped super class类“AppBundle\Entity\Organization”不是有效的实体或映射的超类 【发布时间】:2018-01-15 15:14:57 【问题描述】:我想用 Doctrine 可视化数据库中的数据,但它似乎不起作用...
这是我的课程Organization
:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**Class Organization
* @package AppBundle\Entity
*
* @ORM\Table(name="organization")
* @ORM\Entity(repositoryClass="AppBundle\Repository\
* OrganizationRepository")
*
*/
class Organization
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="name", type="string", length=45)
*
*/
protected $name;
/**
* @return int
*/
public function getId()
return $this->id;
/**
* @param int $id
*/
public function setId($id)
$this->id = $id;
/**
* @return string
*/
public function getName()
return $this->name;
/**
* @param string $name
*/
public function setName($name)
$this->name = $name;
这是错误:
Doctrine\ORM\Mapping\MappingException: 类 “AppBundle\Entity\Organization”不是有效的实体或映射的超级 类。
在 供应商/学说/orm/lib/Doctrine/ORM/Mapping/MappingException.php:346 在 Doctrine\ORM\Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass('AppBundle\Entity\Organization') (vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php:91) 在 Doctrine\ORM\Mapping\Driver\AnnotationDriver->loadMetadataForClass('AppBundle\Entity\Organization', 对象(类元数据)) (vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php:102) 在 Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain->loadMetadataForClass('AppBundle\Entity\Organization', 对象(类元数据)) (vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:151) 在 Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata(object(ClassMetadata), 空,假,数组()) (vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:332) 在 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata('AppBundle\Entity\Organization') (vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php:78) 在 Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata('AppBundle\Entity\Organization') (vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php:216) 在 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor('AppBundle:Organization') (vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:281) 在 Doctrine\ORM\EntityManager->getClassMetadata('AppBundle:Organization') (vendor/doctrine/orm/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php:44) 在 Doctrine\ORM\Repository\DefaultRepositoryFactory->getRepository(object(EntityManager), 'AppBundle:组织') (vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php:698) 在 Doctrine\ORM\EntityManager->getRepository('AppBundle:Organization') (src/AppBundle/Controller/OrganizationController.php:27) 在 AppBundle\Controller\OrganizationController->showInfoAction() 在 call_user_func_array(array(object(OrganizationController), 'showInfoAction'), 数组()) (供应商/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:153) 在 Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1) (供应商/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:68) 在 Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, 真的) (供应商/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:171) 在 Symfony\Component\HttpKernel\Kernel->handle(object(Request)) (web/app_dev.php:29)
我有OrganizationController
和OrganizationRepository
。
【问题讨论】:
在@ORM\Entity(repositoryClass
之后的实体注释中有换行符,这可能是原因。
@TomaszTurkowski 那是因为 *** 在放置完整行而不破坏它时遇到了一些问题,但在我的代码中它没问题。
"Class XXX is not a valid entity or mapped super class" after moving the class in the filesystem的可能重复
@Vamsi 我看到了这个链接但没有用... :(
1-。您使用的是哪个版本的 php 和 Symfony? 2.- 尝试一个 php 应用程序/控制台学说:映射:信息,看看它是否清除了某些东西。 3.- 尝试一个 php 应用程序/控制台学说:缓存:clear-metadata 4.- 尝试一个 php 应用程序/控制台缓存:clear
【参考方案1】:
将类名注释移动到下一行或在其前留出空格,如下所示
/**
* Class Organization
* @package AppBundle\Entity
*
* @ORM\Table(name="organization")
*
* @ORM\Entity(repositoryClass="AppBundle\Repository\OrganizationRepository")
*/
【讨论】:
【参考方案2】:-
您应该检查 php 文件名。你的实体文件名是Organization.php
你应该在你的代码中删除
setId()
方法(它不会解决你的问题,但你不能放这个方法)。因为$id
是自动生成的。
删除这个:
/**
* @param int $id
*/
public function setId($id)
$this->id = $id;
-
另外 - 尽量不要对
$id
属性使用私有可见性。正确的方法是 - 将其设置为受保护。
【讨论】:
以上是关于类“AppBundle\Entity\Organization”不是有效的实体或映射的超类的主要内容,如果未能解决你的问题,请参考以下文章
JavaSE基础(十 三 )---<内部类>成员内部类,静态内部类,局部内部类,匿名内部类,内部类的意义