我有以下实体:
/**
* SeriesAuthorRole
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Blog\Bundle\CoreBundle\Entity\SeriesAuthorRoleRepository")
*/
class SeriesAuthorRole extends AuthorRoleAbstract
{
/**
* @var Series
*
* @ORM\ManyToOne(targetEntity="Blog\Bundle\CoreBundle\Entity\Series", inversedBy="authors")
* @ORM\JoinColumn(name="series", referencedColumnName="id", nullable=false)
* @ORM\Id
*/
private $series;
/**
* @var Author
*
* @ORM\ManyToOne(targetEntity="Blog\Bundle\CoreBundle\Entity\Author")
* @ORM\JoinColumn(name="author", referencedColumnName="id", nullable=false)
* @ORM\Id
*/
protected $author;
/**
* @var Role
*
* @todo Must be nullable
*
* @ORM\ManyToOne(targetEntity="Blog\Bundle\CoreBundle\Entity\Role")
* @ORM\JoinColumn(name="role", referencedColumnName="id", nullable=true)
* @ORM\Id
*/
protected $role;
// ... Getters, setters
}
背后的想法非常简单:我们有作者,角色和系列实体。一个系列可以有几个具有不同角色的作者。同一作者可以在一系列中完成多个角色。
有时,我们并不确切知道作者的角色是什么。在这种情况下,NULL值将用于角色,NULL值代表“我不知道”。
我被教导不要在外来复合键中使用NULL,除非它有意义。嗯,这里有意义,我知道这可以在没有 Doctrine 的情况下实现。但是,就目前而言,Symfony 2抛出了这个错误:
Entity of type Blog\Bundle\CoreBundle\Entity\BandAuthorRole is missing an assigned ID for field 'role'. The identifier generation strategy for this entity requires the ID field to be populated before EntityManager#persist() is called. If you want automatically generated identifiers instead you need to adjust the metadata mapping accordingly.
500 Internal Server Error - ORMException
那么如何在外来复合键中授权NULL值呢?是否可以使用 Doctrine ?
答案 0 :(得分:0)
您的@JoinColumn注释正确,引用http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#annref-joincolumn
然而,
具有复合键的每个实体都不能使用其他id生成器 比“分配”。这意味着ID字段必须具有其值 在调用EntityManager#persist($ entity)。
之前设置