类“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)

我有OrganizationControllerOrganizationRepository

【问题讨论】:

@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”不是有效的实体或映射的超类的主要内容,如果未能解决你的问题,请参考以下文章

Java 静态成员类 非静态的成员类 局部类 匿名类

JavaSE基础(十 三 )---<内部类>成员内部类,静态内部类,局部内部类,匿名内部类,内部类的意义

Kotlin基础(十三) 嵌套类内部类和匿名内部类

java 内部类和外部类的关系

19-Java-核心类库2-包装类Integer类String类StringBuffer类StringBuilder类

Kotlin基础(十三) 嵌套类内部类和匿名内部类