我正在尝试使用指向同一对象的两个复合外键来构造一个对象,但它们似乎具有相同的数据,例如仅在一列product_id上进行连接。
class PostpaidProduct extends Product {
/**
* @ManyToOne(targetEntity="Bundle", fetch="EAGER", cascade={"persist"})
* @JoinColumn(name="bundle_voice_id", referencedColumnName="id")
*/
private $bundleVoice;
/**
* @ManyToOne(targetEntity="Bundle", fetch="EAGER", cascade={"persist"})
* @JoinColumn(name="bundle_data_id", referencedColumnName="id")
*/
private $bundleData;
/**
* @OneToMany(targetEntity="BundlePromo", mappedBy="product", fetch="EAGER", cascade={"persist"})
* @JoinColumns({
* @JoinColumn(name="id", referencedColumnName="product_id"),
* @JoinColumn(name="bundle_voice_id", referencedColumnName="bundle_id")
* })
*/
private $bundleVoicePromos;
/**
* @OneToMany(targetEntity="BundlePromo", mappedBy="product", fetch="EAGER", cascade={"persist"})
* @JoinColumns({
* @JoinColumn(name="id", referencedColumnName="product_id"),
* @JoinColumn(name="bundle_data_id", referencedColumnName="bundle_id")
* })
*/
private $bundleDataPromos;
}
我的映射会出现什么问题? 是否可以使用复合外键但不能成为主键?
答案 0 :(得分:0)
我和Doctrine的一位开发人员谈过,他说@OneToMany关系中的@JoinColumns字段被忽略了。替代方案是只有一个外键并在实体方法中使用匹配标准,根据另一个键过滤所需的条目。另一种解决方案是使用特定于获取这些值的存储库方法。
此外,在OneToMany关系中,急切提取不起作用,因此它会对所有子节点进行单独查询。因此,如果您的产品具有多种价格,那么在获取产品时,它会针对获取价格进行单独查询。