вытащить конкретные данные из базы данных MySQL в тимелеф - PullRequest
0 голосов
/ 15 января 2019

Структура базы данных

Мне нужно извлечь только конкретные данные из таблицы 1, которые связаны с данными в таблице 2. Например:

Допустим, в таблице "меню" у меня есть 2 строки - "Пицца" и "Фри" а в «Таблице ингредиентов» у меня 3 строки - «Сыр», «Картофель», «Соус»

«Пицца» связана с «Сыром» и «Соусом» с внешними ключами из Третьей таблицы, а «Картошка» связана с «Картофелем», теперь я хочу показать только данные из таблицы «меню» и «Ингредиенты» столы, которые связаны между собой.

например:

Пицца - "Сыр", "Соус"

Картофель фри - "Картошка"

Пока я могу только перечислить данные (все данные) из обеих таблиц, я не могу выбрать, какие данные показывать.

Thymeleaf:

        <tr th:each="menu : ${menuList}">
        <td th:text="${menu.name}"></td>
        <td><a th:href="@{/foodDescription}" th:text="Description">Description</a></td>
        <td th:each="ing : ${ingredientList}">
            <ul>
                <li th:text = ${ing.ingredientName}></li>
                <!-- Here I only want to display ingredientName and description which 
                are connected to the specific ${menu.name} -->
            </ul>
        </td>
    </tr>

Контроллер:

    @Controller
    public class MyController{

    @Autowired
    MenuRepository menuRepository;

    @Autowired
    IngredientRepository ingredientRepository;

    @GetMapping("/hello")
    private String hello(){
        return "hello-page";
    }

    @GetMapping("/recipeList")
    public String listPage(Model model){
        model.addAttribute("menuList",menuRepository.findAll());
        model.addAttribute("ingredientList", ingredientRepository.findAll());
        return "list-page";
    }

Menu.java:

@Entity
@Table(name = "menu")
public class Menu {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "name")
    private String name;

    // Mapping To second table
    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "menu_ingredient",
               joinColumns = @JoinColumn(name = "menu_id"),
               inverseJoinColumns = @JoinColumn(name = "ingredient_id"))
    private List<Ingredients> ingredient = new ArrayList<>();
// Constructor/Getter/Setter/ToString

Ingredient.java:

@Entity
@Table(name = "ingredients")
public class Ingredients {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "ingredient")
    private String ingredientName;

    @Column(name = "description")
    private String ingredientDescription;

1 Ответ

0 голосов
/ 15 января 2019

Поскольку Menu связан с Ingredients, он будет содержать связанные ингредиенты. Вам не нужно извлекать Ingredients отдельно.

<tr th:each="menu : ${menuList}">
    <td th:text="${menu.name}"></td>
    <td><a th:href="@{/foodDescription}" th:text="Description">Description</a></td>
    <td th:each="ing : ${menu.ingredient}"> <!-- I have only modified here -->
        <ul>
            <li th:text = ${ing.ingredientName}></li>
        </ul>
    </td>

...