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
实体