1

我试图用两个指向同一个对象的复合外键构造一个对象,但它们似乎具有相同的数据,比如只在一个列 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;

}

我的映射有什么问题?是否可以有复合外键但不是主键?

4

1 回答 1

0

我与 Doctrine 的一位开发人员交谈过,他说 @OneToMany 关系中的 @JoinColumns 字段被忽略。另一种方法是只有一个外键并在实体方法中使用匹配标准,根据另一个键过滤所需的条目。另一种解决方案是使用特定于获取这些值的存储库方法。

此外,在 OneToMany 关系中,渴望获取不起作用,因此它对所有子项进行单独的查询。因此,如果您的产品具有多个价格,则在获取产品时,它将执行单独的查询以获取价格。

于 2013-04-03T09:37:43.253 回答