Doctrine2-注释:渴望加载(join)与可为null的列(ManyToOne)



我有这个:

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

它在sql中为表tblCity创建了正确的JOIN,tblCity实体插入了我的父实体中,也就是"Eager Load"

伪结果:

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

但是,此列需要为null

(如果遇到"丢失"的外部id,它会抱怨缺少TblCity的代理文件)。

所以它看起来是这样的:

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

并且poff出现了"Eager Load"

生成的sql缺少表tblCity的JOIN,并且该列只包含tblCity的id而不包含实体

伪结果:

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

我做错了什么

PS:我不能使用createQuery或类似的东西,所以请不要使用涉及的解决方案

条令@JoinColumn注释具有默认为true的光学属性nullable。请在文档中阅读更多相关信息:21.2.15@JoinColumn

因此,为联接列声明nullable的正确方法是:

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

但默认情况下nullable为true,因此您并不真正需要它…

我的猜测是,在您的情况下,您的@Column注释会否决整个@ManyToOne注释。这就是为什么只得到一个id而没有TblCity实体的原因。

最新更新