0
0

Spring Data Jpaの@OneToMany @ManyToOne Entityテーブル結合基礎 備忘録#5

Posted at

ER図

スクリーンショット 2024-06-23 12.28.24.png

成果物イメージ

スクリーンショット 2024-06-23 12.53.07.png

schema.sql

schema.sql
-- テーブル削除
DROP TABLE IF EXISTS company CASCADE;
DROP TABLE IF EXISTS employee CASCADE;

-- カテゴリーテーブル
CREATE TABLE  company
(
   id SERIAL PRIMARY KEY,
   name TEXT
);

-- アイテムテーブル
CREATE TABLE employee
(
  id SERIAL PRIMARY KEY,
  name TEXT,
  company_id Integer
  );
  

data.sql

data.sql
-- カテゴリーテーブルデータ
INSERT INTO company(name) VALUES('aaa株式会社');
INSERT INTO company(name) VALUES('bbb株式会社');
INSERT INTO company(name) VALUES('ccc株式会社');
INSERT INTO company(name) VALUES('ddd株式会社');
INSERT INTO company(name) VALUES('eee株式会社');


-- 商品テーブルデータ
INSERT INTO employee(name, company_id) VALUES('田中太郎', 1);
INSERT INTO employee(name, company_id) VALUES('鈴木一郎', 1);
INSERT INTO employee(name, company_id) VALUES('佐藤健', 2);
INSERT INTO employee(name, company_id) VALUES('渡辺順一', 2);
INSERT INTO employee(name, company_id) VALUES('斎藤真由美', 3);
INSERT INTO employee(name, company_id) VALUES('佐々木信人', 3);
INSERT INTO employee(name, company_id) VALUES('武田昌幸', 4);
INSERT INTO employee(name, company_id) VALUES('石川小百合', 4);
INSERT INTO employee(name, company_id) VALUES('太田雅子', 5);
INSERT INTO employee(name, company_id) VALUES('橋本寮', 5);

schema.sqlとdata.sqlは特に変える必要はない

Entity

Company.java
@Entity
@Table(name = "company")
public class Company {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Integer id;
     private String name;


     @OneToMany()//1対多
    @JoinColumn(name = "company_id")
     private List<Employee> favoriteHotels = new ArrayList<>();
     
 //ゲッター、セッター、コンストラクタ省略

フィールドとは別で、OneToManyとする

Employee.java
@Entity
@Table(name = "employee")
public class Employee {

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Integer id;
     private String name;
     
     @ManyToOne //多対1
     @JoinColumn(name = "company_id")
     private Company company;
     
//ゲッター、セッター、コンストラクタ省略

ManyToOneの方は、フィールドの方に記述する。

Controller

EmployeeController.java
 @GetMapping("/employee")
    public String employee(Model model) {
        List<Employee> employee = employeeRepository.findAll();
        model.addAttribute("employee" , employee);
        
        return "employeeList";
    }

HTML

employee.html
 <h3>全社員一覧</h3>
  <table border="1">
    <tr>
      <th>社員ID</th>
      <th>名前</th>
      <th>会社名</th>
    </tr>
    <tr th:each="emp:${employee}">
      <td th:text="${emp.id}"></td>
      <td th:text="${emp.name}"></td>
    <!--companyIdから会社名(name)を持ってくる-->
      <td th:text="${emp.company.name}"></td>
    </tr>
  </table>
  <a href="/main">会社一覧</a>

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0