簡體   English   中英

外鍵必須具有與引用的主鍵相同的列數。 但是我沒有使用復合鍵

[英]Foreign key must have same number of columns as the referenced primary key. But I'm not using a composite key

我有一個LibraryModel類,一個LibraryImage類和一個LibraryAttribute類。 LibraryModel可以具有任意數量的LibraryImages和LibraryAttributes。

我得到的錯誤:

org.hibernate.MappingException: Foreign key (FKmbn4xh7xdxv371ao5verqueu3:library_item_attribute [LIBRARY_ITEM_ATTRIBUTE_ID])) must have same number of columns as the referenced primary key (library_item_attribute [LIBRARY_ITEM_ID,LIBRARY_ITEM_ATTRIBUTE_ID])

這是我帶注釋的對象:

庫模型:

@Entity
@Table(name = "library_item", uniqueConstraints = {

})
@Inheritance(strategy = InheritanceType.JOINED)
public class LibraryItemModel implements LibraryItem{
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "LIBRARY_ITEM_ID", unique = true, nullable = false)
    private Integer libraryItemId;

    @Column(name = "ITEM_TITLE", unique = false, nullable = false)
    private String itemTitle;

    @Column(name = "IS_PARENT", nullable = false)
    private Boolean isParent;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name="LIBRARY_ID", nullable = false)
    private LibraryModel libraryModel;

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "ITEM_LISTING",
            joinColumns = {@JoinColumn(name = "PARENT_LIB_ITEM_ID", nullable=false)},
            inverseJoinColumns = {@JoinColumn(name="CHILD_LIB_ITEM_ID", nullable = false)})
    private Set<LibraryItemModel> itemChildren = new HashSet<>();

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "itemChildren")
    private Set<LibraryItemModel> itemParents = new HashSet<>();

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "LIBRARY_ITEM_IMAGE",
            joinColumns = { @JoinColumn(name = "LIBRARY_ITEM_ID", nullable=false)},
            inverseJoinColumns = { @JoinColumn(name="LIBRARY_IMAGE_ID", nullable = false)})
    private Set<LibraryImage> itemImages = new HashSet<>();

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "rootLibraryItemModel")
    private Set<LibraryModel> libraries = new HashSet<>();

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "LIBRARY_ITEM_ATTRIBUTE",
            joinColumns = { @JoinColumn(name = "LIBRARY_ITEM_ID", nullable =false)},
            inverseJoinColumns = { @JoinColumn(name="LIBRARY_ITEM_ATTRIBUTE_ID", nullable = false)})
    private Set<LibraryItemAttribute> libraryItemAttributes = new HashSet<>();
}

LibraryImage:

@Entity
@Table(name = "library_image", uniqueConstraints = {

})
public class LibraryImage {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "LIBRARY_IMAGE_ID", unique = true, nullable = false)
    private Integer libraryImageId;

    @Column(name = "IMAGE_LOCATION")
    private String imageLocation;

    @Column(name = "IMAGE_TITLE")
    private String imageTitle;

    @Enumerated(EnumType.STRING)
    private LibraryImageType imageType;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="LIBRARY_ITEM_ID", nullable = false)
    private LibraryItemModel libraryItemModel;
    }

庫屬性:

@Entity
@Table(name = "library_item_attribute", uniqueConstraints = {

})
public class LibraryItemAttribute {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "LIBRARY_ITEM_ATTRIBUTE_ID", unique = true, nullable = false)
    private Integer libraryItemAttributeId;

    @Column(name = "ATTRIBUTE_NAME")
    private String attributeName;

    @Column(name = "ATTRIBUTE_VALUE")
    private String attributeValue;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="LIBRARY_ITEM_ID", nullable = false)
    private LibraryItemModel libraryItemModel;
}

這確實令人沮喪,因為LibraryImage類的映射沒有問題並且不會引發任何錯誤,但是以與LibraryImage類相同的方式注釋的LibraryAttribute類引發了此錯誤。

有人可以看看一下,讓我知道我的問題是什么嗎?

找到了問題。 在LibraryItemModel類中,我將帶有LibraryItemAttribute的Join表定義為“ LIBRARY_ITEM_ATTRIBUTE”,這是Library項屬性表的名稱。

聯接表是一個不同的表,並且應該具有一個不同的表名。

對於上面的庫映像表,映像表稱為library_image,而聯接表稱為LIBRARY_ITEM_IMAGE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM