![](/img/trans.png)
[英]Receiving Error “Foreign key must have same number of columns as the referenced primary key” despite not using composite keys
[英]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.