0
我有一個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類是引發此錯誤這是很無奈。
有人可以請看看,讓我知道我的問題是什麼?