【问题标题】:PersistenceException: ERROR executing DML bindLog[] - violates foreign keyPersistenceException:执行 DML bindLog[] 时出错 - 违反外键
【发布时间】:2017-01-07 00:49:01
【问题描述】:

我有 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)没有出现在“purchase”中

我使用的是 ebean 生成的 ddl。

【问题讨论】:

    标签: playframework ebean


    【解决方案1】:

    你和 Product 有两个 OneToMany 关系,好吗?既然你在创造一个杰作,那么它就会创造一个产品。但是,在这种情况下没有创建 Purchase 对象。根据这个https://en.wikibooks.org/wiki/Java_Persistence/OneToMany(参见联接表主题),另一方(产品,在这种情况下)必须有一个反向外键。在您的问题中,这意味着 Masterpiece 和 Purchase 的反向引用外键,但是当您创建 Masterpiece 和 Product 关系时,Purchase 不存在。也许一个解决方案是用 ManyToOne 映射它,或者在你的每个 OneToMany(Masterpiece 和 Purchase)中使用 Join Table,为每个关系实现一个单独的表。 我希望它有用!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2011-02-02
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多