如何修复下一个错误?
错误SchemaExport:484 - HHH000389:不成功:alter table CATEGORY_RELATIONS添加约束FK2bn4xlg661b5xbx2qnwi1aqv0外键(CATEGORY_RELATIONS_PARENT_ID)引用CATEGORY 错误SchemaExport:485 - 语句中组合的不兼容数据类型[alter table CATEGORY_RELATIONS add constraint FK2bn4xlg661b5xbx2qnwi1aqv0 foreign key(CATEGORY_RELATIONS_PARENT_ID)引用CATEGORY]
hibernate.version 5.0.7.Final
hsqldb.version 2.3.3
属性,用于会话工厂
hibernate.dialect=org.hibernate.dialect.HSQLDialect
分类
@Entity
@Table(name = "CATEGORY",
indexes = {
@Index(name = "CATEGORY_NAME_INDEX",
columnList = "CATEGORY_NAME")})
public class Category extends JsonNamedModel {
@Id
@Column(name = "CATEGORY_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "CATEGORY_NAME")
private String name;
@Column(name = "CATEGORY_IMAGE")
private String image;
@OneToOne(cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
@JoinTable(name = "CATEGORY_RELATIONS",
joinColumns = {
@JoinColumn(name = "CATEGORY_RELATIONS_CATEGORY_ID", referencedColumnName = "CATEGORY_ID")},
inverseJoinColumns = {
@JoinColumn(name = "CATEGORY_RELATIONS_PARENT_ID", referencedColumnName = "CATEGORY_ID")})
private Category parent;
@OneToMany(cascade = CascadeType.REMOVE, fetch = FetchType.EAGER, mappedBy = "parent")
private List<Category> children;//...
}
CategoryRelations
@Entity
@Table(name = "CATEGORY_RELATIONS")
@IdClass(CategoryRelations.CategoryRelationsPrimaryKey.class)
public class CategoryRelations implements Serializable {
@Id
@Column(name = "CATEGORY_RELATIONS_CATEGORY_ID")
private String categoryId;
@Id
@Column(name = "CATEGORY_RELATIONS_PARENT_ID")
private String parentId;
@Entity
@IdClass(CategoryRelationsPrimaryKey.class)
public static class CategoryRelationsPrimaryKey implements Serializable {
private long categoryId;
private long parentId;
}//...
}
答案 0 :(得分:1)
我认为这是抱怨,因为你的类型不匹配。在CATEGORY_RELATIONS
中,您的密钥类型为String
,但在CATEGORY
中,您的主键为int
。虽然在实际操作中您可能只在两个字段中存储整数数据,但数据库引擎无法证明这一点。没有什么可以阻止某人在CATEGORY_RELATIONS.categoryId
中放入一个非整数,并使FK永远不会满足。
尝试将CATEGORY_RELATIONS.categoryId
更改为int。
现在,我看着它,你的PK类显示它们很长。尝试将CategoryRelations
对象(可能还有CATEGORY_RELATIONS
表)中的所有类型切换为相同的类型。