연관관계 매핑 종류
- One To One : 일대일
- One To Many : 일대다
- Many To One : 다대일
- Many To Many : 다대다
연관관계 매핑 방향
- 단방향 : 두 엔티티의 관계에서 한쪽의 엔티티만 참조하는 형식
- 양방향 : 두 엔티티의 관계에서 각 엔티티가 서로의 엔티티를 참조하는 형식
일대일 매핑
1. 일대일 단방향 매핑
BaseEntity
@Getter
@Setter
@ToString
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
ProductDetail
@Entity
@Getter
@Setter
@ToString
public class ProductDetail extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String description;
@OneToOne
@JoinColumn(name = "product_number")
private Product product;
}
Product
@Entity
@Getter
@Setter
@ToString
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long number;
private String name;
private Integer price;
private Integer stock;
}
Test
@SpringBootTest
@RequiredArgsConstructor
public class ProductDetailRepositoryTest {
private final ProductDetailRepository productDetailRepository;
private final ProjectRepository projectRepository;
@Test
public void saveAndReadTest1(){
Product product = new Product();
product.setName("사과");
product.setPrice(1000);
product.setStock(50);
projectRepository.save(product);
ProductDetail productDetail = new ProductDetail();
productDetail.setDescription("맛좋은 사과");
productDetail.setProduct(product);
productDetailRepository.save(productDetail);
Optional<ProductDetail> savedDetail = productDetailRepository.findById(productDetail.getId());
if(savedDetail.isPresent()){
ProductDetail p = savedDetail.get();
System.out.println(p);
}
}
}

2. 일대일 양방향 매핑
Product
@Entity
@Getter
@Setter
@ToString
@Table(name = "product")
public class Product extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long number;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Integer price;
@Column(nullable = false)
private Integer stock;
@OneToOne(mappedBy = "product")
private ProductDetail productDetail;
}
'BackEnd : Spring > SpringBoot' 카테고리의 다른 글
[SpringBoot] JpaRepository @Modifying, @Transactional (0) | 2024.07.02 |
---|---|
[TalentTree 프로젝트] HttpSession : 로그인된 사용자 정보 가져오기 (0) | 2024.06.03 |
[Springboot] SpringBoot 3.x maven+ QueryDSL 설정하기 (0) | 2024.05.27 |
[Springboot] MockBean 테스트 코드 작성하기 (0) | 2024.05.27 |
[Springboot] Spring Doc으로 api 문서화하기 (1) | 2024.05.24 |