Spring boot: пролетный путь: проверка схемы: отсутствует таблица [продукты]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring boot: пролетный путь: проверка схемы: отсутствует таблица [продукты]

Сообщение Anonymous »

Я пытался интегрировать 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;
}
}
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»