728x90
반응형
이전 실습에서 요구사항을 추가해보자
요구사항
- 상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장될 수 있다.
- 모든 데이터는 등록일과 수정일이 필수이다.
테이블 및 엔티티 설계
실습
테이블 설계 내용을 보면 단일 테이블 전략을 사용하여 구성한 것을 확인할 수 있다.
상품 종류 추가
- Item.java
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 테이블 전략
@DiscriminatorColumn(name = "DTYPE") // 구분자 컬럼 지정
public abstract class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
// getter, setter
}
- Album.java
, Book.java
, Movie.java
/** Album.java */
@Entity
public class Album extends Item {
private String artist;
private String etc;
// getter, setter
}
/** Book.java */
@Entity
public class Book extends Item {
private String author;
private String isbn;
// getter, setter
}
/** Movie.java */
@Entity
public class Movie extends Item {
private String director;
private String actor;
// getter, setter
}
공통 정보 상속
- BaseEntity.java
@MappedSuperclass // 매핑 정보 상속 클래스
public abstract class BaseEntity {
private LocalDateTime createdDate;
private LocalDateTime lastModifiedDate;
// getter, setter
}
- Item.java
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DTYPE")
public abstract class Item extends BaseEntity { // 매핑 정보 상속 받음
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
// getter, setter
}
Main
- JpaMain.java
public class JpaMain
{
public static void main( String[] args )
{
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Book book = new Book();
book.setAuthor("김영한");
book.setName("JPA");
em.persist(book);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
동작 결과
(1) Table DDL
(2) Insert SQL 및 결과
728x90
반응형
'Dev > JPA' 카테고리의 다른 글
[JPA] 실습 - 연관관계 관리 (0) | 2021.08.27 |
---|---|
[JPA] 프록시와 연관관계 관리 (0) | 2021.08.27 |
[JPA] 고급 매핑 (0) | 2021.08.24 |
[JPA] 실습 - 다양한 연관관계 매핑 (0) | 2021.08.23 |
[JPA] 다양한 연관관계 매핑 (0) | 2021.08.23 |
댓글