PersistenceException:ERROR执行DML bindLog [] - 违反外键

时间:2017-01-07 00:49:01

标签: playframework ebean

我有3个实体。

public class Masterpiece {
    @Id
    public Long id;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Product> products;
}
public class Product  {
    @Id
    public Long id;
}

public class Purchase {
    @Id
    public Long id;

    @OneToMany(fetch = FetchType.EAGER)
    private List<Product> productList;
}

当我尝试使用产品保存Masterpiece时,我收到错误:

在表“product”上插入或修改违反外键“fk_product_purchase_4”\ n详细信息:Key(purchase_id)=(1)未在“购买”中出现

我使用ebean生成的ddl。

1 个答案:

答案 0 :(得分:0)

你和Product有两个OneToMany关系,好吧?既然你正在创造一件杰作,那么它将创造一个产品。但是,在这种情况下没有创建Purchase对象。根据此https://en.wikibooks.org/wiki/Java_Persistence/OneToMany(请参阅连接表主题),另一方(在这种情况下为产品)必须具有后退外键。在您的问题中,它表示Masterpiece和Purchase的后引用外键,但在创建Masterpiece和Product关系时不存在Purchase。也许解决方案是将它与ManyToOne映射回来,或者在每个OneToMany(Masterpiece和Purchase)中使用Join Table实现每个关系的分离表。 我希望它有用!