2016-04-08 3 views
1

Wie nächsten Fehler beheben?Inkompatible Datentypen während ALTER-Tabelle in HSQL mit Hibernate

ERROR Schema: 484 - HHH000389: Erfolglos: alter table CATEGORY_RELATIONS Einschränkung FK2bn4xlg661b5xbx2qnwi1aqv0 Fremdschlüssel (CATEGORY_RELATIONS_PARENT_ID) Referenzen KATEGORIE ERROR Schema hinzufügen: 485 - inkompatiblen Datentypen in Kombination in Anweisung [alter table CATEGORY_RELATIONS Einschränkung FK2bn4xlg661b5xbx2qnwi1aqv0 Fremdschlüssel hinzufügen (CATEGORY_RELATIONS_PARENT_ID) Referenzen KATEGORIE]

hibernate.version 5.0.7.Final

hsqldb.version 2.3.3

Eigenschaft, für die Sitzungs Fabrik verwendet

hibernate.dialect=org.hibernate.dialect.HSQLDialect 

Kategorie

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

Antwort

1

Ich denke, es beschwert sich, weil Ihre Art bis nicht übereinstimmen. In CATEGORY_RELATIONS haben Sie die Schlüsseltypen wie String, aber in CATEGORY haben Sie den Primärschlüssel als int. Während Sie in der Praxis möglicherweise nur ganzzahlige Daten in beiden Feldern speichern, kann die DB-Engine dies nicht beweisen. Es gibt nichts, was jemanden davon abhält, eine nicht ganzzahlige Zahl in CATEGORY_RELATIONS.categoryId zu setzen und es so zu machen, dass der FK niemals zufrieden sein könnte.

Versuchen Sie, CATEGORY_RELATIONS.categoryId zu einem Int zu ändern.

Und jetzt, wo ich es sehe, zeigt Ihre PK-Klasse sie als longs. Versuchen Sie, alle Typen in Ihrem CategoryRelations Objekt (und möglicherweise die CATEGORY_RELATIONS Tabelle) zu allen gleichen Typen zu schalten.

Verwandte Themen