2011-04-17 65 views
0

學說2實體的實體具有複合鍵:學說2 - 持續複合鍵

/** 
* @Entity 
*/ 
class Test 
{ 
    /** 
    * @Id 
    * @Column (type="integer", length=11, name="id") 
    * 
    */ 
    protected $id = null; 

    /** 
    * @Id 
    * @Column (type="integer", length=11, name="idtwo") 
    * 
    */ 
    protected $idtwo = null; 

    public function setIdTwo($id) 
    { 
     $this->idtwo = $id; 
    } 

    public function setId($id) 
    { 
     $this->id = $id; 
    } 

} 

保存實體

$test = new Test(); 
$test->setId(1); 
$test->setIdTwo(1); 
$em->persist($test); 

DB表:

CREATE TABLE `Bella_Test` (
    `id` int(11) NOT NULL, 
    `idtwo` int(11) NOT NULL, 
    PRIMARY KEY (`id`,`idtwo`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

預期結果:將一行添加到帶有兩個ID字段的數據庫表中,其值爲1.

實際結果:沒有行被添加到數據庫表中。沒有例外被拋出。

問題:發生了什麼事?

+2

你叫'$ EM->的flush()' – rojoca 2011-04-18 02:49:09

+0

使用複合材料的PK,確保他們的工作在理論上很好,但你有沒有嘗試過刪除從來不喜歡或更新一個?該應用程序需要知道這兩個值,而不是一個PK,應用程序只需要知道一個ID。 – 2011-12-01 01:00:10

回答

0

您可以使用try catch塊來看看會發生什麼

try{ 
    $em->flush(); //don't forget flush after persisting an object 
} 
catch(Exception $e){ 
    echo 'Flush Operation Failed: '.$e->getMessage(); 
} 

其他假設,在我看來,你的實體表名和數據庫表名可能相互不匹配。我認爲這不是一個壞主意,讓一個嘗試

/** 
* @Entity 
* @Table(name="Bella_Test") 
*/ 
. 
. 
.