我有这个:
/**
* @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
实体的原因。