@turdubekov
Студент

Как связать два отношения правильно в java?

У меня есть три таблицы, которые имеет отношение ManyToMany:
1. Продукт
2. Категория
3. продукт_котегория (промежуточная таблица)

@Entity
@Table(name = "category")
@Data
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String description;

    @ManyToMany(mappedBy = "category")
    private List<Product> productList;
}


@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	private String name;
	private String description;
	private String category;
	private int price;


	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "product_categories",
				joinColumns = @JoinColumn(name = "product_id"),
				inverseJoinColumns = @JoinColumn(name = "category_id"))
	private List<Category> categoryList;	
}


create table prouct_categories(
product_id BIGINT REFERENCES product(id),
category_id BIGINT REFERENCES category(id)
);


Проблема:
При добавлении данных в таблицу Category
вводит ошибку: org.postgresql.util.PSQLException: ОШИБКА: значение NULL в столбце "id" отношения "category" нарушает ограничение NOT NULL

Вопрос: в чем может быть ошибка? Как правильно связать две таблицы?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Отвечу исходя из вашего второго вопроса, на который я уже написал ответ:

@Entity
@Table(name = "category")
@Data
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;

    @Column(length = 1000)
    private String description;

    @ManyToMany(mappedBy = "categoryList")
    private List<Product> productList;
}


@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	private String name;

	@Column(length = 1000)
	private String description;

	private double price;


	@ManyToMany(fetch = FetchType.LAZY, cascade = {
			CascadeType.PERSIST,
			CascadeType.MERGE
	})
	@JoinTable(name = "product_categories",
				joinColumns = @JoinColumn(name = "product_id"),
				inverseJoinColumns = @JoinColumn(name = "category_id"))
	private List<Category> categoryList;

}


Полезная информация - https://vladmihalcea.com/the-best-way-to-use-the-m...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы