2015-11-26 91 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实体。