Doctrine2 @OneToOne不起作用

时间:2015-06-25 10:20:02

标签: symfony doctrine-orm

我的@OneToOne关系有点问题。我使用了很多@OneToMany,而且效果很好。

我构建了最简单的@OneToOne案例:

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Lemon\RestBundle\Annotation as Rest;

/**
* @ORM\Table(name="TEST")
* @ORM\Entity
* @Rest\Resource(name="test")
*/
class Test
{
    /**
    * @var integer
    *
    * @ORM\Id
    * @ORM\GeneratedValue
    * @ORM\Column(name="ID", type="integer")
    */
   private $id;

   /**
    * @var string
    *
    * @ORM\Column(name="CONTENT", type="string")
    */
   private $content;

   /**
    * @ORM\OneToOne(targetEntity="Cmt", mappedBy="test", cascade={"persist"})
    **/
   private $cmt;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Lemon\RestBundle\Annotation as Rest;

/**
 * @ORM\Table(name="CMT")
 * @ORM\Entity
 * @Rest\Resource(name="Cmt")
 */
class Cmt
{
    /**
     * @var integer
     *
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(name="ID", type="integer")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="CONTENT", type="string")
     */
    private $content;

    /**
     * @ORM\OneToOne(targetEntity="Test", inversedBy="cmt")
     * @ORM\JoinColumn(name="test_id", referencedColumnName="id")
     **/
    private $test;
}

所以,我们只有一个带有一个注释Cmt的Test实体。没什么难的。

如您所见,我使用的是LemonRestBundle(使用Lemon \ RestBundle \ Annotation作为Rest)。

发送此JSON:

{
    "content": "test",
        "cmt": {
            "content": "abcd"            
        }
}

在该网址上:http://localhost/web/web/app_dev.php/api/test

我发现了这个错误:

An exception occurred while executing 'INSERT INTO CMT (CONTENT, test_id) VALUES (?, ?)' with params [\"adzae\", null]:\\\n\\\nSQLSTATE[HY000]: General error: 515 General SQL Server error: Check messages from the SQL Server [515] (severity 16) [(null)]

我不知道为什么Doctrine2(或者也许是LemonRestBundle,但我真的不这么认为......)不能用TEST(ID)填充TEST_ID。这与我的@ManyToOne关系完美无缺,这就是为什么我真的对此感到困惑。

我是否需要在@OneToMany中的Test构造函数中添加一些内容?相当于:

$this->cmts = new \Doctrine\Common\Collections\ArrayCollection();

我已经检查了Doctrine2 Association Mapping,他们的@OneToOne示例完全相同。

拜托,帮助我!

0 个答案:

没有答案
相关问题