HSQL中的ALTER表与Hibernate不兼容的数据类型

时间:2016-04-08 14:09:40

标签: java sql database hibernate hsqldb

如何修复下一个错误?

错误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;
    }//...
}

1 个答案:

答案 0 :(得分:1)

我认为这是抱怨,因为你的类型不匹配。在CATEGORY_RELATIONS中,您的密钥类型为String,但在CATEGORY中,您的主键为int。虽然在实际操作中您可能只在两个字段中存储整数数据,但数据库引擎无法证明这一点。没有什么可以阻止某人在CATEGORY_RELATIONS.categoryId中放入一个非整数,并使FK永远不会满足。

尝试将CATEGORY_RELATIONS.categoryId更改为int。

现在,我看着它,你的PK类显示它们很长。尝试将CategoryRelations对象(可能还有CATEGORY_RELATIONS表)中的所有类型切换为相同的类型。