반응형
- 요즘 뭔가 따로 작성하기엔 너무 범위가 왔다갔다해서
- 일기 형식으로 공부했던걸 작성하는 용도로라도 기록하기 위해 작성함.
1. OneToMany 속성 중 orphanRemoval = true는?
- 부모 엔터티가 자식 엔터티를 제거할 때 자식 엔터티가 정구적으로 삭제되도록 하기.
- orphans => 고아
- 즉. 부모-자식 관계에서 고아로 생각할 수 있는 자식 엔터티가 부모와의 관계가 끊긴 후
- DB에 남아있게 하지 않으려면 true, 아니면 false나 설정안하면 됨(default).
2. @Lob
- 엔터티 클래스의 속성이 DB에 매핑될 때 사용.
- Large Object를 나타내며, 매우 큰 데이터나 바이너리 데이터를 나타내는 속성에 적용.
3. Entity명
- 클래스명을 DetailStockEntity라고 했다면
- DB의 테이블명은 자동으로 스네이크 케이스로 변경되어서 "detail_stock_entity"라는 이름의 테이블에 매핑.
- 다르게 적용하고 싶다면 @Table(name="detail_stock") 이렇게 적용하면 됨.
4. 부모-자식 연관 관계
- 보통 JPA에서는 양방향 연관 관계보단 단방향 연관 관계를 선호.
- 불필요한 복잡성을 초래할 수도 있고, 실수로 인해 무한 루프가 발생할 수도 있기에.
- 그래서 보통 부모에서 자식으로 단방향 연결을 더 선호함.
- 다만, 코드 작성은 자식 엔터티에서 @ManyToOne을 사용해야 함.
// StockEntity
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@SuperBuilder
@Table(name = "stock")
public class StockEntity extends CreateEntity {
@Id
@Column(name = "stock_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long stockId;
}
// DetailStockEntity
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@SuperBuilder
@Table(name = "detail_stock") // JPA는 언더스코어로 구분
public class DetailStockEntity extends CreateEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long detailStockId;
@NotNull
private String stockName;
@ManyToOne
@JoinColumn(name = "stock_id")
private StockEntity stock;
}
5. @OneToMany, @ManyToOne
- @OneToMany: 많은 수의 자식 엔터티가 하나의 부모 엔터티에 속하는 관계를 나타냄.
- @ManyToOne: 하나의 부모 엔터티가 많은 수의 자식 엔터티를 갖는 관계를 나타냄.
6. 정확한 소수 값 저장을 위해선 BigDecimal
- Java에서 BigDecimal 타입으로 저장한다면 MySQL에서는 decimal 타입으로 생성.
'SpringBoot' 카테고리의 다른 글
SpringBoot - @Schedulder, @Data, Builder (2024.05.15) (0) | 2024.05.15 |
---|---|
SpringBoot - 단순 정리 및 고려, 추가 사항 (2024.05.14) (0) | 2024.05.14 |
SpringBoot - Spring Security로 비밀번호 암호화 (maven) (0) | 2024.02.19 |
SpringBoot - Swagger2, MySQL, JPA 설치 및 셋팅 (maven) (0) | 2024.02.19 |
SpringBoot - 전자정부프레임워크 셋팅 (0) | 2024.02.19 |