Symfony 3 Doctrine复合主键: 实体中不允许单个id作为复合主键

4
我有一个实体,其中包含一个整数列(compositeId)和一个字符串列(asin),我希望这两个列都作为复合键使用。因此,我在文档中查找相关信息:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html,但是当我尝试加载我的存储库时...
$myEntity = $em->getRepository(MyEntity::class);

我收到了这个错误信息:

在AppBundle\Entity\MyEntity中,组合主键不允许使用单一id。

这是我的实体(Entity):

<?php

namespace AppBundle\Entity;


use Doctrine\ORM\Mapping as ORM;

/**
 * @Entity(repositoryClass="AppBundle\Repository\MyEntityRepository")
 * @Table(name="my_entity")
 */
class MyEntity {

    /**
     * @Column(type="integer")
     * @GeneratedValue()
     */
    protected $id;

    /**
     * @var integer
     * @Id
     * @Column(type="integer", name="composite_id")
     */
    protected $compositeId;

    /**
     * @var string
     * @Id
     * @Column(type="string", name="asin")
     */
    protected $asin;

    /**
     * @var string
     * @Column(type="string", name="sku")
     */
    protected $sku;

    /**
     * @var string
     * @Column(type="string", name="ean")
     */
    protected $ean;

    /**
     * @codeCoverageIgnore
     * @return mixed
     */
    public function getId() {

        return $this->id;
    }

    /**
     * @param mixed $id
     *
     * @return MyEntity;
     */
    public function setId($id) {

        $this->id = $id;

        return $this;
    }

    /**
     * @codeCoverageIgnore
     * @return int
     */
    public function getCompositeId() {

        return $this->compositeId;
    }

    /**
     * @param int $compositeId
     *
     * @return MyEntity;
     */
    public function setCompositeId($compositeId) {

        $this->compositeId = $compositeId;

        return $this;
    }

    /**
     * @codeCoverageIgnore
     * @return string
     */
    public function getAsin() {

        return $this->asin;
    }

    /**
     * @param string $asin
     *
     * @return MyEntity;
     */
    public function setAsin($asin) {

        $this->asin = $asin;

        return $this;
    }

    /**
     * @codeCoverageIgnore
     * @return string
     */
    public function getSku() {

        return $this->sku;
    }

    /**
     * @param string $sku
     *
     * @return MyEntity;
     */
    public function setSku($sku) {

        $this->sku = $sku;

        return $this;
    }

    /**
     * @codeCoverageIgnore
     * @return string
     */
    public function getEan() {

        return $this->ean;
    }

    /**
     * @param string $ean
     *
     * @return MyEntity;
     */
    public function setEan($ean) {

        $this->ean = $ean;

        return $this;
    }
}

我做错了什么? 当我在我的ID表中删除@generatedValue时,它可以工作。 但是我需要在我的ID列中自动生成值。 我没有在我的ID列上有任何@Id注释,只有@generatedValue,而在我的两个@Id列上,我没有任何带有@generatedValue的注释,但我却得到了这个错误...

也许您并不需要这个,/** * @Column(type="integer") * @GeneratedValue() */ protected $id; - Alok Patel
是的,当我在列ID上删除@generatedValue时,它可以工作。但是,如果我将来想要添加具有生成ID的新条目呢? - goldlife
生成的ID是什么意思?序列ID? - Alok Patel
是的,我是指当我在表中创建新行时自动生成的Id。 - goldlife
1
只需删除其中的@Id属性,这样它就不会被视为表的主键。 - Alok Patel
我的ID列上没有任何@ ID注释,只有@ generatedValue,在我的两个@ ID列上,我没有使用@ generatedValue注释,但是我遇到了这个错误... - goldlife
2个回答

1

-6

您需要在属性描述中删除所有的@Id,除了受保护的$id


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接