【问题标题】:Hibernate JPA Cannot Create due to FK由于 FK,Hibernate JPA 无法创建
【发布时间】:2013-04-02 08:59:13
【问题描述】:

当我尝试在我的应用程序中创建一个新类别时,我收到以下错误,它抱怨 FK 约束。但是,它抱怨的 FK 将类别描述映射到类别,因为两者都是同时创建的,我不确定为什么会出现问题。

我可以毫无问题地更新类别和类别描述。

错误

ERROR - Cannot add or update a child row: a foreign key constraint fails (`crcart3`.`categorydescription`, CONSTRAINT `FKC6C4CBFE6FD28044` FOREIGN KEY (`category_description_id`) REFERENCES `categorydescription` (`category_id`))

分类表

@Table(name = "Category")
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "category_id")
    private int categoryId;

    @JoinTable(
            name = "ImageMapping",
            joinColumns = @JoinColumn(name = "category_id"),
            inverseJoinColumns = @JoinColumn(name = "image_id")
    )
    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Image categoryImageId;

    @JoinTable(
            name="CategoryDescription",
            joinColumns = @JoinColumn(name="category_id"),
            inverseJoinColumns = @JoinColumn(name="category_description_id")
    )
    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private CategoryDescription categoryDescription;

    @JoinTable(
            name = "CategoryMapping",
            joinColumns = @JoinColumn(name = "category_id"),
            inverseJoinColumns = @JoinColumn(name = "parent_category_id")
    )
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Category parentCategory;

    @Column(name = "category_sort_order")
    private int sortOrder;

    @Column(name = "date_added")
    private Timestamp dateAdded;

    @Column(name = "last_modified")
    private Timestamp lastModified;

类别描述表

@Table(name="CategoryDescription")
public class CategoryDescription {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "category_description_id")
    private int categoryDescriptionId;

    @Column(name="category_id")
    private int categoryId;

    @OneToOne
    @JoinColumn(name="language_id")
    private Language languageId;

    @Column(name="category_name")
    private String categoryName;

    @Column(name="category_text")
    private String categoryText;

【问题讨论】:

  • 导致这个异常的代码是?
  • 它是一个带有 null categoryId 和一个 parentCategory.categoryId 为 1 的插入
  • 这是代码的描述。错误是由代码引起的,所以代码很重要。

标签: mysql hibernate jpa jpa-2.0 hibernate-mapping


【解决方案1】:

错误信息说:

(`crcart3`.`categorydescription`, 
 CONSTRAINT `FKC6C4CBFE6FD28044` FOREIGN KEY (`category_description_id`) 
 REFERENCES `categorydescription` (`category_id`))

这意味着在表categorydescription中,列category_description_id相同categorydescription的列category_id的外键。

这对我来说看起来不对。在此表中包含 category_id 列似乎也不合适。

【讨论】:

  • FK 应该是对类别表中 category_id 列的引用。至少这是我对 category 实体中的 join 的理解。
  • 哎哟。我刚刚注意到同一个表(CategoryDe​​scription)也被用作Category 和... CategoryDe​​scription 之间的连接表。这也是错误的。
猜你喜欢
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2013-07-28
  • 2021-02-13
  • 2018-10-16
  • 2018-05-15
相关资源
最近更新 更多