#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
Большое спасибо!
Комментарии:
1. пожалуйста, дайте более подробную информацию и проясните вашу проблему
Ответ №1:
Вероятно, в вашей конфигурации по умолчанию используется механизм хранения MyISAM, который не поддерживает FK согласно документации.
Пожалуйста, настройте свой диалект hibernate на InnoDB:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect