Удаление в отношениях в Java SpringBoot - PullRequest
0 голосов
/ 08 апреля 2020

Доброго времени суток, разработчики, я с трудом справляюсь с этой проблемой в моем приложении, использующем среду SpringBoot. По сути, я не могу соединить два и два вопроса о том, как удалить один из элементов в отношении отношений после удаления его родителя. Вот мое объяснение: сначала обе сущности с соответствующим отношением друг к другу:

Product(Children)

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO,generator = "native")
    @GenericGenerator(name="native",strategy="native")
    private Long id;

    @OneToMany(mappedBy = "products",fetch= FetchType.EAGER,cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<Category> categorySet= new HashSet<>();

    CONSTRUCTOR FOR PRODUCTS ENTITY 
-------------------------------------GETTERS AND SETTERS---------------------------------

Быть этим сущностью Продукта при условии, что один продукт может классифицироваться по нескольким категориям, следовательно, его отношение OnetoMany.Then:

Categories(Parent)

@Entity
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO,generator = "native")
    @GenericGenerator(name="native",strategy="native")
    private Long id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="product_id")
    private Product products;

    CONSTRUCTOR FOR CATEGORY ENTITY 

     ---------------------------GETTERS AND SETTERS-----------------------------

В соответствии с прежней концепцией, но с обратной логикой c применил отношение категорий к продуктам и работает в моей базе данных. в репозиториях допустим, что я установил

Category Repository

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import java.util.Collection;

@RepositoryRestResource
public interface CategoryRepository extends JpaRepository <Category,Long> {
}

Product Repository

package com.miniAmazon;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.*;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

@RepositoryRestResource
public interface ProductRepository extends CrudRepository<Product,Long> {
    Product findByProductName (String productName);
}

Затем попытался установить команду для удаления товаров или категорий из моих Jpa и Crud Reps, используя тест Junit для объекта категории, например:

Category Entity

 @Test
    public static void whenDeletingCategories_thenProductsShouldAlsoBeDeleted() {
        ProductRepository.deleteAll();
        assert(CategoryRepository.count()).isEqualTo(0);
        assert(ProductRepository.count()).isEqualTo(0);
    }

@Test
    public static void whenDeletingProducts_thenCategoriesShouldAlsoBeDeleted() {
        CategoryRepository.deleteAll();
        assert(CategoryRepository.count()).isEqualTo(0);
        assert(ProductRepository.count()).isEqualTo(2);
    }

Выдает мне сообщение об ошибке, говоря, что «метод non-stati c deleteAll () / count ()» нельзя ссылать из контекста stati c ». Любая идея о том, почему это происходит. Любой совет? Спасибо заранее !!!!. Хорошего дня !!!

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Попробуйте использовать экземпляры bean-компонентов CategoryRepository и ProductRepository вместо интерфейсов.

0 голосов
/ 08 апреля 2020

Вы пытаетесь использовать нестатический c метод интерфейса, но deleteAll() или count() не являются статическим c методом. Попробуйте создать объект репозитория, затем автоматически подключите его для вызова deleteAll() / count() метода.

@Autowired
private CategoryRepository categoryRepository;

И используйте categoryRepository для вызова deleteAll() / count() метода

categoryRepository.deleteAll();
assert(categoryRepository.count()).isEqualTo(0);
...