Spring/Hibernate: Tabelle wird nicht erstellt – „Fehler beim ausführen von DDL …“

In meiner Struktur, jede „Aufgabe“ hat OneToOne Beziehung mit einem „Problem“ und jedes „Problem“ hat OneToOne mit einer „Lösung“. Eine „Lösung“ hat eine Liste von „Items“.

Ich kann nicht einen Weg finden, damit es funktioniert. wenn die Ruhezeit beginnt, habe ich diese Ausnahme, und die Tabelle „Artikel“ wird nicht erstellt.

org.hibernate.tool.schema.spi.CommandAcceptanceException: Fehler beim ausführen der DDL – „alter table Artikel add constraint FKmkmqr7wiqxa0t51p9k4c9kbkb foreign key (solution_id) Referenzen-Lösung (id)“ via JDBC-Anweisung
bei org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys(AbstractSchemaMigrator.java:433) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:249) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.intern.SessionFactoryImpl.(SessionFactoryImpl.java:310) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.boot.intern.SessionFactoryBuilderImpl.bauen(SessionFactoryBuilderImpl.java:467) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939) [hibernate-core-5.3.7.Endgültig.jar:5.3.7.Finale]
bei org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) [spring-orm-5.1.3.RELEASE.jar:5.1.3.RELEASE]

Ist der code unten (das weglassen Getter und setter).

Aufgabe

@Entity
@JsonIgnoreProperties(ignoreUnknown = true,
value = {"id"})
public class Task {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @JsonProperty("task")
    private String taskName;

    private String status;

    private Timestamps timestamps;

    @OneToMany(mappedBy = "task", cascade = {CascadeType.ALL})
    private List<Problem> problem;

    public Task(){
    }
}

Problem

@Entity
public class Problem {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Integer id;

   private Integer capacity;

   @ElementCollection
   @CollectionTable(name="weights", 
   joinColumns=@JoinColumn(name="problem_id"))
   @Column(name="weights")
   private List<Integer> weights;

   @ElementCollection
   @CollectionTable(name="_values", 
   joinColumns=@JoinColumn(name="problem_id"))
   @Column(name="_values")
   private List<Integer> values;

   @ManyToOne(fetch=FetchType.LAZY, cascade = {CascadeType.ALL})
   @JsonIgnore
   private Task task;

   @OneToOne
  private Solution solution;
}

Lösung:

@Entity
public class Solution {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@ManyToOne(fetch=FetchType.LAZY)
@JsonIgnore
private Task task;
@OneToOne(cascade = {CascadeType.ALL})
private Problem problem;

@OneToMany
private List<Item> items;
}

Item:

@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

private Integer values;
private Integer weight;

@ManyToOne(fetch=FetchType.LAZY, cascade = {CascadeType.ALL})
@JsonIgnore
private Solution solution;

}

  • du hast nicht erwähnt das foreign key Namen. Hinzufügen @JoinColumn(name = "solution_id") Anmerkung Item Tabelle nach @ManyToOne annotation.
  • Es funktioniert nicht. Gleichen Fehler.
  • um den gleichen Fehler, den Sie bedeuten – der Fehler ist immer noch für das Element Tisch?
  • Der Fehler war der gleiche. Ich habe gerade herausgefunden. Es wurde die variable „Werte“. Es erzeugt einen syntax-Fehler in mysql.
  • Wenn Sie mit Schwierigkeiten konfrontiert sind, die in generieren von pojo ‚ s, die Sie verwenden können, hibernate reverse engineering, das automatische generieren der pojo-basiert auf dem Datenbank-schema. So dass Sie nicht brauchen, um über schema-Fehler.



One Reply
  1. 0

    War das problem, dass eine variable/Feld namens „Werte“. „Werte“ ist ein reserviertes Wort in Mysql, so dass die Abfrage generiert Spring JPA ist ungültig.

    One-Lösung ist einfach zu ändern, die variable „Werte“ zu „_values“, oder fügen Sie die annotation @Column(name = "_value") wenn Sie benötigen, um die Namen im code der gleiche.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.