如何修复下一个错误?
错误 SchemaExport:484 - HHH000389:不成功:更改表 CATEGORY_RELATIONS 添加约束 FK2bn4xlg661b5xbx2qnwi1aqv0 外键 (CATEGORY_RELATIONS_PARENT_ID) 引用 CATEGORY ERROR SchemaExport:485 - 语句中组合的不兼容数据类型 [alter table CATEGORY_RELATIONS add constraint FK2bn4xlg661b5xbx2qnwi1aqv0 foreign key (CATEGORY_RELATIONS_PARENT_ID) references CATEGORY]
hibernate.version 5.0.7.Final
hsqldb.version 2.3.3
属性,用于 session 工厂
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;//...
}
类别关系
@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;
}//...
}
最佳答案
我认为这是在提示,因为您的类型不匹配。在 CATEGORY_RELATIONS
中,键类型为 String
,但在 CATEGORY
中,主键为 int
。虽然在实际实践中您可能只在两个字段中存储整数数据,但数据库引擎无法证明这一点。没有什么能阻止某人在 CATEGORY_RELATIONS.categoryId
中放入一个非整数,并使其永远无法满足 FK。
尝试将 CATEGORY_RELATIONS.categoryId
更改为 int。
现在我看了一下,你的 PK 类显示它们是多头。尝试将 CategoryRelations
对象(可能还有 CATEGORY_RELATIONS
表)中的所有类型都切换为相同类型。
关于java - 使用 Hibernate 在 HSQL 中更改表时不兼容的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36501800/