JPA(13)
-
값 타입2
◎ 값 타입 컬렉션-> 값 타입을 컬렉션에 담아서 사용하는 방식으로 값 타입을 하나 이상 저장할 때 사용한다.-> 데이터베이스에는 같은 테이블에 컬렉션을 저장할 수 없다. 따라서 컬렉션을 저장하기 위한 별도의 테이블을 생성해서 저장해야 한다.-> 다음은 값 타입 저장 예제다.@Entitypublic class Member extends BaseEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private Long id; @Column(name = "name") private String username; // Period @Embedded p..
2025.02.28 -
값 타입1
◎ JPA의 데이터 타입 분류-> 엔티티 타입- @Entity로 정의하는 객체- 데이터가 변해도 식별자로 지속해서 추적 가능(회원의 나이 값을 변경해도 pk와 같은 식별자로 추적 가능) -> 값 타입- int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본타입이나 객체- 식별자가 없고 값만 있기 때문에 변경 시 추적 불가 ◎ 값 타입 분류-> 기본값 타입- 자바 기본 타입(int, long, double...)- 래퍼 클래스(Integer, Long)- String -> 임베디드 타입(embedded type, 복합 값 타입) -> 컬렉션 값 타입(collection value type) ◎ 기본값 타입-> 생명주기가 엔티티에 의존한다. 회원 엔티티를 삭제하면 회원의 이름, 나이 등..
2025.02.27 -
영속성 전이 CASCADE & 고아 객체
◎ 영속성 전이-> 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 같이 영속 상태로 만들기 위해 사용한다.-> 다음은 Child와 Parent 엔티티가 다대일로 매핑되어 있는 상태에서 영속성 전이 설정을 한 것이다.public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); ..
2025.02.27 -
즉시 로딩 & 지연 로딩
-> Member 엔티티와 Team 엔티티가 다대일 연관관계인 경우 Member를 조회할 때 반드시 Team 조회를 해야 할까?-> 만약 Member만 조회하는 경우가 더 많다면 Member를 조회할 떄 굳이 사용하지도 않는 Team을 조회할 필요가 없다.이 때 지연 로딩을 사용하여 필요한 시점에만 연관된 엔티티를 조회하도록 한다. ◎ 지연 로딩(Lazy)-> 지연 로딩은 필요한 시점에 연관된 객체의 데이터를 불러오는 것이다.-> Member와 Team이 연관되어 있는 상황에서 Member를 조회할 때 Team을 같이 조회하지 않고 필요한 시점에만 조회하려면 지연 로딩을 사용하면 된다.public class JpaMain { public static void main(String[] args) { ..
2025.02.26 -
JPA 프록시
◎ JPA 프록시-> 실제 엔티티의 데이터를 로딩하기 전까지 대리역할을 하는 객체-> em.find()를 호출하면 데이터베이스를 통해 실제 엔티티를 조회하지만 em.getReference()를 호출하면 실제 엔티티가 아닌 프록시 엔티티 객체를 조회한다.-> 실제 클래스를 상속받아 만들어진다.-> 사용하는 입장에서는 해당 객체가 프록시인지 실제 객체인지 구분하지 않고 사용한다.-> 프록시 객체는 실제 객체의 참조(target)을 보관한다.-> 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메서드를 호출한다. ◎ 프록시 객체의 초기화 과정-> 아래 코드를 실행했을 때의 과정이다.Member member = em.getReference(Member.class, member.getId());member.ge..
2025.02.22 -
@PrePersist
@PrePersist : JPA 의 생명주기 콜백을 처리하는 애너테이션 중 하나다. -> @PrePersist는 새로운 엔티티에 대해 persist가 호출되기 전에 실행된다. 즉, 비영속 상태에서 영속 상태로 되기 전에 실행된다. -> board 엔티티에서 Long타입으로 조회수, 좋아요수, 댓글수를 초기화를 한다. -> 그리고 나서 db 테이블을 통해 데이터를 확인해보면 이 세 데이터의 초기값은 null 이다. -> 이번에는 해당 엔티티 클래스에 @PrePersist를 이용해 초기값을 0으로 설정한다. -> 서버를 실행해서 db 테이블을 다시 확인해보면 이번에는 0으로 초기화가 된 것을 볼 수 있다. -> @PrePersist가 붙은 코드가 엔티티에 대해 persist 되기 전에 실행되어 0으로 먼저 ..
2023.05.17