Hibernate не создает отношения FK и ссылки автоматически (с использованием Spring Boot)

#hibernate #spring-boot #database-design #foreign-keys #schema

#спящий режим #spring-boot #база данных-дизайн #внешние ключи #схема

Вопрос:

У меня проблема с моим приложением Spring Boot (с использованием hibernate). У меня есть следующие 3 объекта. Когда я запускаю свое приложение, моя схема БД будет создана автоматически (именно то, что я хочу), НО для части FK и отношений. Там, где у меня должен быть FK, у меня просто есть столбец INT, который ни на что не ссылается…

Пожалуйста, найдите под 3 объектами и внизу сгенерированную схему…

PS: Я использую MySQL.

Ингредиент

 @Entity
@Table(name="ingredients")
public class Ingredient {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;

@Column(name="name", length=50)
private String name;

@ManyToMany
@JoinTable(
        name="recipe_ingredient",
        joinColumns=@JoinColumn(name="ingredient_id"),
        inverseJoinColumns=@JoinColumn(name="recipe_id"))
private List<Recipe> recipes;

   getters and setters
  

Рецепт

 @Entity
@Table(name="recipes")
public class Recipe {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;

@Column(name="title", length=100)
private String title;

@Column(name="description", length=3000)
private String description;

@Column(name="short_presentation", length=200)
private String shortPresentation;

@Column(name="image_url", length=200)
private String imageUrl;

@ManyToMany
@JoinTable(
        name="recipe_ingredient",
        joinColumns=@JoinColumn(name="recipe_id"),
        inverseJoinColumns=@JoinColumn(name="ingredient_id"))
private List<Ingredient> ingredients;

@Column(name="minutes")
private int cookingTimeInMinutes;

@ManyToOne(cascade={CascadeType.DETACH,CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name="difficulty_id")
private Difficulty difficulty;

  getters and setters
  

Сложность

 @Entity
@Table(name="difficulties")
public class Difficulty {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="difficulty", length=50)
    private String difficulty;

    @OneToMany(mappedBy="difficulty",
            cascade= {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
    private List<Recipe> recipes;

  getters and setters 
  

приложение.свойства

 spring.jpa.hibernate.ddl-auto = update
  

DB генерирует схему

Большое спасибо!

Комментарии:

1. пожалуйста, дайте более подробную информацию и проясните вашу проблему

Ответ №1:

Вероятно, в вашей конфигурации по умолчанию используется механизм хранения MyISAM, который не поддерживает FK согласно документации.

Пожалуйста, настройте свой диалект hibernate на InnoDB:

 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect