Hibernate не создает отношения FK и ссылки автоматически (используя Spring Boot) - PullRequest
0 голосов
/ 07 марта 2019

У меня проблема с моим приложением 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 

application.properties

spring.jpa.hibernate.ddl-auto = update

Схема создания БД

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

1 Ответ

0 голосов
/ 07 марта 2019

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

. Пожалуйста, настройте свой спящий диалект на InnoDB:

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