jpaテーブルクエリー1対多

2075 ワード

データベース#データベース#


表company
 id, name
表employee
employee_id,employee_name,company_id,price,monthtime,amount

エンティティークラス


Company

import lombok.Data;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

/**
 *      
 */
@Entity
@Table(name = "company")
@Data
public class Company {

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

    private String name;
    //   1
    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinColumn(name = "companyId")// 2 
    //or  2
    @oneToMany(mappedBy="companyId",cascade=CascadeType.All,fetch=FetchType.EAGER)
    private List employees=new ArrayList<>();



}

注記属性mappedByとは、関連関係がcompanyクラスのemployees属性から取得できることを意味します.Cascade属性はCascadeTypeに設定.ALLとは、主従表が全面的にカスケード関係を確立することである.Fetch属性はFetchTypeに設定.EAGERとは、ロードルールがインスタントロードであることを意味します.ソースコードを見るとデフォルトでOneToMany注記のfetch属性がFetchTypeに設定されていることがわかります.LAZY.
 

Employee

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import javax.persistence.*;
import java.math.BigDecimal;

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

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int employeeId;

    private String employeeName;

    private int companyId;

    private BigDecimal price;

    private int monthtime;

    private BigDecimal amount;

}

Repositoryクラス

import com.xb.selltest.model.Company;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import javax.swing.text.html.Option;
import java.util.List;
import java.util.Optional;

public interface CompanyRepository extends JpaRepository {
       
            List  findById(int id);
}

サービス、impl、controllerを書く方法はみんな知っています.あるいは直接testに行ってもいいです