2015-11-26 55 views
0

我有這樣的:Doctrine2 - 註釋:渴望負載(加入)與空列(多對一)

/** 
* @ManyToOne(targetEntity="TblCity",fetch="EAGER",cascade={"persist"}) 
* @JoinColumn(name="tblCity",referencedColumnName="Id") 
*/ 

,並創建正確的SQL JOIN的表tblCity和TblCity實體在我的母公司插 - 又名 「心切負載」

僞結果:

PersonEntity: { 
    Id: 1 
    ... 
    CityEntity: { 
     Id: 1 
     ... 
    } 
} 

但是,這欄必須爲空的

(如果它運行到一個「失蹤」的外國人身份證,它抱怨缺少代理文件的TblCity)。

所以它看起來像這樣:

/** 
* @Column(nullable=true) 
* @ManyToOne(targetEntity="TblCity",fetch="EAGER",cascade={"persist"}) 
* @JoinColumn(name="tblCity",referencedColumnName="Id") 
*/ 

POFF有那張「心切負載」

生成的SQL缺少JOIN表tblCity和列包含只有編號而不是TblCity實體

僞結果:

PersonEntity: { 
    Id: 1 
    ... 
    CityEntity: 1 (as integer) 
} 

我在做什麼錯?

PS:我無法使用的createQuery或這樣的事情,所以請不涉及該

回答

0

學說@JoinColumn批註解決方案有一個optiobal屬性nullable默認爲true。瞭解更多關於此文件在這裏:21.2.15. @JoinColumn

所以正確的方式來聲明nullable的連接列:

@JoinColumn(name="tblCity",referencedColumnName="Id", nullable=true) 

但可爲空默認爲true,所以你真的需要它...

我的猜測是你的@Column註釋是在你的情況下取代整個@ManyToOne註釋。這就是爲什麼你只得到一個id和沒有TblCity實體。