Spring / Hibernate: таблица не создана - «Ошибка выполнения DDL ....» - PullRequest
0 голосов
/ 03 января 2019

В моей структуре каждая «Задача» имеет отношение OneToOne с одной «Проблемой», а каждая «Задача» имеет OneToOne с «Решением». «Решение» имеет список «Предметов».

Я не могу найти способ заставить это работать. когда начинается спящий режим, у меня возникает это исключение, и таблица «Элемент» не создается.

org.hibernate.tool.schema.spi.CommandAcceptanceException: Ошибка при выполнении DDL «изменить элемент таблицы, добавить ограничение в org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept (GenerationTargetToDatabase.java:67) ~ [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString (AbstractSchemaMigrator.java:559) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings (AbstractSchemaMigrator.java:504) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys (AbstractSchemaMigrator.java:433) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration (AbstractSchemaMigrator.java:249) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration (AbstractSchemaMigrator.java:114) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction (SchemaManagementToolCoordinator.java:183) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process (SchemaManagementToolCoordinator.java:72) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.internal.SessionFactoryImpl. (SessionFactoryImpl.java:310) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.boot.internal.SessionFactoryBuilderImpl.build (SessionFactoryBuilderImpl.java:467) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] в org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build (EntityManagerFactoryBuilderImpl.java:939) [hibernate-core-5.3.7.Final.jar: 5.3.7.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory (SpringHibernateJpaPersistenceProvider.java:57) [spring-orm-5.1.3.RELEASE.jar: 5.1.3.RELEASE] * 100

Код приведен ниже (исключая геттеры и сеттеры).
Задача

@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(){
    }
}

Задача

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

Решение:

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

Пункт:

@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;
* *} Тысяча двадцать-один

1 Ответ

0 голосов
/ 03 января 2019

Проблема заключалась в наличии переменной / поля под названием «значения». «values» - зарезервированное слово в Mysql, поэтому запрос, сгенерированный Spring JPA, недействителен.

Одним из решений является просто изменить переменную "values" на "_values" или добавить аннотацию @Column(name = "_value"), если вам нужно сохранить имя в коде таким же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...