Doctrine orm Doctrine2-注释:即时加载(join)与可空列(manytone)

Doctrine orm Doctrine2-注释:即时加载(join)与可空列(manytone),doctrine-orm,annotations,entity,nullable,eager-loading,Doctrine Orm,Annotations,Entity,Nullable,Eager Loading,我有这个: /** * @ManyToOne(targetEntity="TblCity",fetch="EAGER",cascade={"persist"}) * @JoinColumn(name="tblCity",referencedColumnName="Id") */ 它为sql中的表tblCity创建了正确的联接,tblCity实体插入到我的父实体中,即“渴望加载” 伪结果: PersonEntity: { Id: 1 ... CityEntity:

我有这个:

/**
 * @ManyToOne(targetEntity="TblCity",fetch="EAGER",cascade={"persist"})
 * @JoinColumn(name="tblCity",referencedColumnName="Id")
 */
它为sql中的表tblCity创建了正确的联接,tblCity实体插入到我的父实体中,即“渴望加载”

伪结果:

PersonEntity: {
    Id: 1
    ...
    CityEntity: {
        Id: 1
        ...
    }
}
PersonEntity: {
    Id: 1
    ...
    CityEntity: 1 (as integer)
}
但是,此列需要可以为空

(如果遇到“丢失”的外来id,它会抱怨TblCity的代理文件丢失)

所以它必须是这样的:

/**
 * @Column(nullable=true)
 * @ManyToOne(targetEntity="TblCity",fetch="EAGER",cascade={"persist"})
 * @JoinColumn(name="tblCity",referencedColumnName="Id")
 */
还有“急切的负载”

生成的sql缺少表tblCity的联接,该列只包含id而不包含tblCity的实体

伪结果:

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

我做错了什么?


PS:我不能使用createQuery或诸如此类的东西,因此请不要使用涉及该问题的解决方案。条令
@JoinColumn
注释有一个optiobal属性
nullable
,该属性默认为
true
。请阅读文档中的更多信息:

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

@JoinColumn(name="tblCity",referencedColumnName="Id", nullable=true)
但是默认情况下nullable为true,因此您不需要它

我猜您的
@列
注释在您的情况下推翻了整个
@manytone
注释。这就是为什么您只会得到一个
id
,而没有
TblCity
实体