본문 바로가기

전체 글227

JAVA ORM - JPA(Fetch Join) 페치조인(Fetch Join)연관된 엔티티나 컬렉션을 함께 로드하는데 사용되는 기술로, 기본적으로 JPA에서 연관된 엔티티는 지연로딩으로 설정된경우에, 해당 엔티티에 접근할 때마다 별도의 쿼리가 발생하는데 이를 N+1문제라고 함. 페치 조인을 사용해 메인 엔티티와 연관된 엔티티를 한 번의 쿼리로 함께 로드해 성능을 최적화 할 수 있다. @Entitypublic class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "product", fetch = FetchType.LAZY) private Li.. 2024. 8. 12.
JAVA ORM - JPA(JPQL) JPQL(Java Persistencce Query Language)JPA에서 제공하는 쿼리언어.SQL과 유사하지만, 테이블이 아닌 엔티티 객체를 대상으로 쿼리를 작성한다.@Entitypublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private int age; ...} 이 멤버라는 엔티티에 대해 쿼리를 작성한다 치자.EntityManager em = entityManagerFactory.createEntityManager();TypedQuery query = em.createQuery("SELECT m FROM Memb.. 2024. 8. 8.
JAVA ORM - JPA(영속성 전이, 임베디드타입, 값타입 컬렉션) 엔티티하나를 영속상태로 만들 때 연관된 엔티티도 같이 영속상태로 만드는 것.@OneToMany(mappedBy="parent", cacade=CascadeType.PERSIST)이런식으로 cascade 옵션을 사용해서 같이 엮을 수 있다.  cascade옵션CascadeType.PERSIST부모 엔티티가 persist() 메서드에 의해 저장될 때, 관련된 자식 엔티티도 함께 저장.CascadeType.MERGE부모 엔티티가 merge() 메서드에 의해 병합될 때, 관련된 자식 엔티티도 함께 병합.CascadeType.REMOVE부모 엔티티가 삭제될 때, 관련된 자식 엔티티도 함께 삭제.CascadeType.REFRESH부모 엔티티가 새로고침될 때, 관련된 자식 엔티티도 함께 새로고침.CascadeType.. 2024. 8. 7.
JAVA ORM - JPA(proxy, loading) 프록시란정처기공부할때 디자인패턴에서 공부했던부분이다. 다른 객체에 대한 인터페이스 역할을 하는 객체를 말한다. 실제 객체에 대한 접근을 제어하거나 추가적인 기능을 제공한다. 객체의 구조를 변경하지 않고 기능을 확장하거나 제어할 수 있게 해준다.역할로는1. 접근제어 : 클라이언트가 실제 객체에 직접 접근하는것을 제어함. 권한이 있는 사용자만 접근하게 한다.2. 성능향상 : 실제 객체에 대한 접근을 지연시켜서 시스템의 성능을 최적화 할 수 있다. 불필요한 객체 생성이나 DB접근을 피할 수 있다. EntityManager의 두가지 메서드1. em.find() : DB에서 실제 엔티티를 조회. 메서드가 실행될 때 즉시 쿼리를 실행한다.즉시 로딩. 엔티티가 없을 때 null을 반환 한다. EntityManager.. 2024. 8. 6.