728x90
소개
JPA-적응기1에 작성된 내용을 기반으로 작성하였으며
이후 총 정리 및 사용 후기 등을 JPA-적응기2에 올릴 생각입니다.
또한 추후에 어떤 기술을 추가로 사용 해볼것인지도 같이 작성하겠습니다.
개발 환경
- 개발 소개 : JPA-적응기1
- ERD : JPA-e-commerce
- GitHub : jpa-e-commerce
DDL과 Entity 비교
예시들은 기본 Entity, 공통 Entity, 멀티키 Entity 만 작성 되어 있고 그외에는 Github 로 들어가서 확인해 주시면 감사하겠습니다.
- common
공통으로 들어가는 Column은 상속 받아 사용한다.
다른 방법으로 @Embeddable 을 사용하여 변수 처럼 사용 할수있다.
- Entity
// 다른 Entity에서 사용시 "extends CommonEntity" 하여 사용하면된다.
@Data
@MappedSuperclass
public class CommonEntity {
@Column(updatable = false, nullable = false)
protected Date regDate;
@Column(nullable = true, insertable = true)
protected Date modDate;
}
또는
/*
다른 Entity에서 사용시
@Embedded
private CommonEntity commonEntity;
*/
@Embeddable
public class CommonEntity {
@Column(updatable = false, nullable = false)
protected Date regDate;
@Column(nullable = true, insertable = true)
protected Date modDate;
// Getter, Setter, 등 필요한 메서드들
}
- product
- DDL
CREATE TABLE `products` (
`Key` INT NOT NULL,
`name` VARCHAR(50) NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
`reg_date` DATE NOT NULL,
`mod_date` DATE NULL
);
- Entity
@Data
@Entity
@Table(name = "Products")
@EqualsAndHashCode(callSuper=false)
public class ProductsEntity extends CommonEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(nullable = false, length = 100)
private String name;
@ColumnDefault("0")
private Double price;
}
- product_categories
멀티 키 사용
RDS를 사용하다 보면 동적으로 Type을 관리 할때가 있다.
ManyToMaNy 이며
하단의 예로 하나의 product에도 여러개의 카테고리가 입력 될수 도 있기 때문에 아래와 같은 경우도 사용한다.
- DDL
CREATE TABLE `product_categories` (
`category_id` INT NOT NULL,
`product_id` INT NOT NULL,
`reg_date` DATE NOT NULL,
`mod_date` DATE NULL
);
- Entity
@Data
@Entity
@Table(name = "ProductCategories")
@IdClass(ProductCategoryEntity.ProductCategoryId.class)
@EqualsAndHashCode(callSuper=false)
public class ProductCategoryEntity extends CommonEntity {
@Id
@ManyToOne
@JoinColumn(name = "category_id")
private CategoryEntity categories;
@Id
@ManyToOne
@JoinColumn(name = "product_id")
private ProductsEntity products;
public static class ProductCategoryId implements Serializable {
private CategoryEntity categories;
private ProductsEntity products;
}
}
728x90
'BackEnd > Spring Boot' 카테고리의 다른 글
JPA 적응기_2(Basic편) (0) | 2023.06.11 |
---|---|
JPA 기본 log사용하기 (0) | 2023.06.11 |
JPA @Column 옵션 (0) | 2023.06.10 |
JPA 테스트 환경 구축 (0) | 2023.06.10 |
JPA GenerationType 속성 (0) | 2023.06.09 |