Я пытался интегрировать Flyway для миграции, но теперь у меня возникла ошибка. Я думаю, что в основном это говорит о проверке схемы: отсутствует таблица [продукты]. У меня есть 2 файла .sql в resources/db. Изначально я сохранил его в resources/db/migrations, но поскольку путь к файлу показывал db.migrations в IDE, хотя и переместил его в db. Путь обновляется в application.properties. Не мог понять, как это исправить. Пробовал несколько вещей, упомянутых в chatgpt/gemini, но безуспешно.
V1__create_users_table.sql
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE
);
V2__create_products_table.sql
CREATE TABLE products (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DOUBLE NOT NULL,
user_id BIGINT NOT NULL,
CONSTRAINT fk_products_user
FOREIGN KEY (user_id)
REFERENCES users(id)
ON DELETE CASCADE
);
application.properties
spring.application.name=demo
# The location of your database (change 'my_db' to your actual database name)
spring.datasource.url=jdbc:mysql://localhost:3306/my_db
# Your MySQL credentials
spring.datasource.username=root
spring.datasource.password=****
# The Driver class (Spring usually finds this, but being explicit helps)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Hibernate should only validate (NOT create)
spring.jpa.hibernate.ddl-auto=validate
# Optional but recommended
spring.jpa.show-sql=true
# Flyway
spring.flyway.enabled=true
spring.flyway.locations=classpath:db
#spring.flyway.baseline-on-migrate=true
pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.springframework.boot
spring-boot-starter-parent
4.0.5
com.example
demo
0.0.1-SNAPSHOT
26
org.springframework.boot
spring-boot-starter-webmvc
org.springframework.boot
spring-boot-starter-webmvc-test
test
org.springframework.boot
spring-boot-starter-data-jpa
com.mysql
mysql-connector-j
runtime
org.springframework.boot
spring-boot-starter-validation
org.flywaydb
flyway-core
compile
org.flywaydb
flyway-mysql
compile
org.springframework.boot
spring-boot-maven-plugin
Пользователь
package com.example.demo.user;
import com.example.demo.products.Product;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
import jakarta.validation.constraints.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
@NotBlank(message = "Name is required")
@Size(min = 3, max = 20, message = "Name must be between 3 and 20 characters")
private String name;
@Column(unique = true, nullable = false)
private String email;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JsonManagedReference
private List
products = new ArrayList();
public User() {} // Required by JPA
public User(String name, String email, List products) {
this.name = name;
this.email = email;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public void setProducts(List products) {
this.products = products;
if (products != null) {
// Link the parent (this User) to every child (Product)
for (Product p : products) {
p.setUser(this);
}
}
}
public List getProducts() {
return this.products;
}
}
Сущность продукта
package com.example.demo.products;
import com.example.demo.user.User;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private double price;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
@JsonBackReference
private User user;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
public void setUser(User user) {
this.user = user;
}
}
Spring boot: пролетный путь: проверка схемы: отсутствует таблица [продукты] ⇐ JAVA
Программисты JAVA общаются здесь
1777028172
Anonymous
Я пытался интегрировать Flyway для миграции, но теперь у меня возникла ошибка. Я думаю, что в основном это говорит о проверке схемы: отсутствует таблица [продукты]. У меня есть 2 файла .sql в [b]resources/db.[/b] Изначально я сохранил его в [b]resources/db/migrations[/b], но поскольку путь к файлу показывал db.migrations в IDE, хотя и переместил его в db. Путь обновляется в application.properties. Не мог понять, как это исправить. Пробовал несколько вещей, упомянутых в chatgpt/gemini, но безуспешно.
[b]V1__create_users_table.sql[/b]
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE
);
[b]V2__create_products_table.sql[/b]
CREATE TABLE products (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DOUBLE NOT NULL,
user_id BIGINT NOT NULL,
CONSTRAINT fk_products_user
FOREIGN KEY (user_id)
REFERENCES users(id)
ON DELETE CASCADE
);
[b]application.properties[/b]
spring.application.name=demo
# The location of your database (change 'my_db' to your actual database name)
spring.datasource.url=jdbc:mysql://localhost:3306/my_db
# Your MySQL credentials
spring.datasource.username=root
spring.datasource.password=****
# The Driver class (Spring usually finds this, but being explicit helps)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Hibernate should only validate (NOT create)
spring.jpa.hibernate.ddl-auto=validate
# Optional but recommended
spring.jpa.show-sql=true
# Flyway
spring.flyway.enabled=true
spring.flyway.locations=classpath:db
#spring.flyway.baseline-on-migrate=true
[b]pom.xml[/b]
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.springframework.boot
spring-boot-starter-parent
4.0.5
com.example
demo
0.0.1-SNAPSHOT
26
org.springframework.boot
spring-boot-starter-webmvc
org.springframework.boot
spring-boot-starter-webmvc-test
test
org.springframework.boot
spring-boot-starter-data-jpa
com.mysql
mysql-connector-j
runtime
org.springframework.boot
spring-boot-starter-validation
org.flywaydb
flyway-core
compile
org.flywaydb
flyway-mysql
compile
org.springframework.boot
spring-boot-maven-plugin
[b]Пользователь[/b]
package com.example.demo.user;
import com.example.demo.products.Product;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
import jakarta.validation.constraints.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
@NotBlank(message = "Name is required")
@Size(min = 3, max = 20, message = "Name must be between 3 and 20 characters")
private String name;
@Column(unique = true, nullable = false)
private String email;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JsonManagedReference
private List
products = new ArrayList();
public User() {} // Required by JPA
public User(String name, String email, List products) {
this.name = name;
this.email = email;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public void setProducts(List products) {
this.products = products;
if (products != null) {
// Link the parent (this User) to every child (Product)
for (Product p : products) {
p.setUser(this);
}
}
}
public List getProducts() {
return this.products;
}
}
[b]Сущность продукта[/b]
package com.example.demo.products;
import com.example.demo.user.User;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.*;
@Entity
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private double price;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
@JsonBackReference
private User user;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
public void setUser(User user) {
this.user = user;
}
}
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия