Spring Boot (13) 연관 관계 실습

넙데데맨·2022년 8월 24일
0
post-custom-banner

일대일 단방향 매핑

Product의 상세 정보 테이블 생성

public class ProductDetail extends BaseEntity{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String description;

    @OneToOne
    @JoinColumn(name ="product_number")
    private Product product;
}

저장 테스트

@SpringBootTest
public class ProductDetailRepositoryTest {
    @Autowired
    ProductDetailRepository productDetailRepository;

    @Autowired
    ProductRepository productRepository;

    @Test
    public void saveAndReadTest(){
        /** 객체 생성 */
        Product product = new Product();
        product.setName("스프링 부트 JPA");
        product.setPrice(5000);
        product.setStock(500);
        ProductDetail productDetail = new ProductDetail();
        productDetail.setProduct(product);
        productDetail.setDescription("스프링 부트와 JPA를 함께 볼 수 있는 책");

        /** 저장 */
        productRepository.save(product);
        productDetailRepository.save(productDetail);

        /** 확인 */
        System.out.println("savedProduct : " +
                productDetailRepository
                        .findById(productDetail.getId())
                        .get()
                        .getProduct());

        System.out.println("savedProductDetail : " +
                productDetailRepository
                        .findById(productDetail.getId())
                        .get());
    }
}


select 절에서 product_detail과 product과 함께 조회된다.
left outer join 실행 이유 : optional 값이 true로 설정 되어 있기 때문에 매핑 값이 null인 결과도 포함하는 Left Outer Join이 실행된다.
false로 설정 시 Inner Join 실행

@OneToOne

fetch() : DB 로딩 전략 (default : EAGER 즉시 로딩)
optional() : 매핑 시 매핑 값 null 유무
default : true 매핑 값이 null이어도 된다.

profile
차근차근
post-custom-banner

0개의 댓글