73665


**環境**  
・eclipse (spring tool suite 4)  
・spring  
・thymeleaf  
・MySQL

以下のようなテーブルがあります

[![2tables](https://i.stack.imgur.com/uayNw.png)](https://i.stack.imgur.com/uayNw.png)

* * *

これを以下の記述で book category id のまま表示することはできました。

Model: Books

[code]

    package librarypackage.model;
    
    import java.io.Serializable;
    import javax.persistence.*;
    
    @Entity
    @Table(name="book")
    public class Books implements Serializable {
    
      @Id
      private int id;
    
      @Column(name="book_category_id")
      private int bookCategoryId;
    
      private String name;
    
      ...略
    }
    
[/code]

Model: Book category

[code]

    package librarypackage.model;
    
    import java.io.Serializable;
    import javax.persistence.*;
    
    @Entity
    @Table(name="book_category")
    public class BookCategory implements Serializable {
    
      @Id
      private int id;
    
      private String category;
    
      ...略
    
[/code]

BooksRepository

[code]

    package onepackage.repositories;
    
    import onepackage.model.Books;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface BooksRepository extends JpaRepository<Books, Long> {
    
    }
    
[/code]

Controller: Books

[code]

    package onepackage.controller;
    
    import onepackage.model.Books;
    
    import onepackage.repositories.BooksRepository;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @Controller
    public class BooksController {
        
        @Autowired
        private BooksRepository booksRepository;
        
    
        @GetMapping("/books")
        public String getBooks(Model model) {
            List<Books> books = booksRepository.findAll();
            model.addAttribute("booklist", books);
            return "books";
        }
    }
    
[/code]

View

[code]

    ...略
    <table>
        <thead>
            <tr>
                <th></th>
                <th>本の名前</th>
                <th>カテゴリ</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="books : ${booklist}">
                <td th:text="${books.id}">a</td>
                <td th:text="${books.name}">b</td>
                <td th:text="${books.bookCategoryId}">c</td>
            </tr>
        </tbody>
    </table>
    ...略
    
[/code]

こうすると表示は

[![output
table](https://i.stack.imgur.com/xgqEE.png)](https://i.stack.imgur.com/xgqEE.png)

となります。  
`${booklist}`には category id の情報しかないわけですが、テーブルのカテゴリのところを id
でなくて、対応するカテゴリ(の文字列)を表示したいのですが、どういった方法があるでしょうか。


CC BY-SA 4.0
2021-01-28T03:40:26.947
73625
2021-01-29T09:02:25.843
2021-01-29T09:02:25.843
36372
36372
question
java spring spring-boot mvc thymeleaf
テーブルから得た List が外部キーだけ持っているが、そのキー（id）に対応するデータを取得し、 thymeleaf で HTML(view) に表示したい

[code]

    create table book_category (
      id integer primary key,
      category varchar(255)
    );
    
    create table book (
      id integer primary key,
      book_category_id integer,
      name varchar(255),
      foreign key (book_category_id) references book_category(id)
    );
    
[/code]

のように外部キー制約が付くテーブルの関係は、 JPA では次のように記述します。

[code]

    @Entity
    @Table(name = "book")
    public class Books implements Serializable {
    
        @Id
        private int id;
    
        @ManyToOne
        private BookCategory bookCategory;
    
        private String name;
    
        // ...略
    }
    
[/code]

これに合わせてThymeleafテンプレートも変更します:

[code]

          <tbody>
            <tr th:each="books : ${booklist}">
              <td th:text="${books.id}">a</td>
              <td th:text="${books.name}">b</td>
              <td th:text="${books.bookCategory.category}">c</td>
            </tr>
          </tbody>
    
[/code]

[サンプルコード](https://github.com/yukihane/stackoverflow-
qa/tree/master/jaso73625)([差分](https://github.com/yukihane/stackoverflow-
qa/commit/af921fb9b3f2ec91c43cd1e48a54779e5039e6ab))


CC BY-SA 4.0
2021-01-28T18:05:21.033
73665
2021-01-28T18:05:21.033
2808
73625
answer