Java 通过多个映射为实体映射的重复列

Java 通过多个映射为实体映射的重复列,java,hibernate,jpa,many-to-one,embeddable,Java,Hibernate,Jpa,Many To One,Embeddable,我不明白为什么我仍然得到hibernate.MappingException: 实体映射中的重复列:PanelCategoryOption列:category\u id(应使用insert=“false”update=“false”进行映射) 面板类别选项映射 @Entity @Table(name = "eq_panel_category_option") public class PanelCategoryOption { @EmbeddedId private Panel

我不明白为什么我仍然得到hibernate.MappingException:

实体映射中的重复列:PanelCategoryOption列:category\u id(应使用insert=“false”update=“false”进行映射)

面板类别选项映射

@Entity
@Table(name = "eq_panel_category_option")
public class PanelCategoryOption {

    @EmbeddedId
    private PanelCategoryOptionId id;    
}
@Embeddable
public class PanelCategoryOptionId implements Serializable {

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumns({
                @JoinColumn(name = "panel_id", referencedColumnName = "panel_id"),
                @JoinColumn(name = "category_id", referencedColumnName = "category_id")})
        private PanelCategory panelCategory;

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumns({
                @JoinColumn(name = "category_option_id", referencedColumnName = "id", insertable = false, updatable = false),
                @JoinColumn(name = "category_id", referencedColumnName = "category_id", insertable = false, updatable = false)})
        private CategoryOption categoryOption;

}
PanelCategoryOptionId映射

@Entity
@Table(name = "eq_panel_category_option")
public class PanelCategoryOption {

    @EmbeddedId
    private PanelCategoryOptionId id;    
}
@Embeddable
public class PanelCategoryOptionId implements Serializable {

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumns({
                @JoinColumn(name = "panel_id", referencedColumnName = "panel_id"),
                @JoinColumn(name = "category_id", referencedColumnName = "category_id")})
        private PanelCategory panelCategory;

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumns({
                @JoinColumn(name = "category_option_id", referencedColumnName = "id", insertable = false, updatable = false),
                @JoinColumn(name = "category_id", referencedColumnName = "category_id", insertable = false, updatable = false)})
        private CategoryOption categoryOption;

}
模式


为什么在PanelCategoryOption表中有category\u id引用。 这不是一个规范化的数据库设计,因为它不符合第二个标准形式。尝试并更新您的数据库设计

另外,如果您不想更改DB设计,则需要进行以下更改:

  @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "category_option_id", referencedColumnName = "id", insertable = false, updatable = false) })
    private CategoryOption categoryOption;

 @JoinColumns({
                @JoinColumn(name = "category_id", referencedColumnName = "category_id", insertable = false, updatable = false)})
 private Category category;