본문 바로가기

Java/ORM16

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.
JAVA ORM - JPA(상속을 매핑?) 자바에는 상속이라는 개념이 있다. 하지만 관계형 DB에는 상속관계를 딱히 지원하지 않는다.class Animal { void eat() { System.out.println("This animal eats food."); }}class Dog extends Animal { void bark() { System.out.println("The dog barks."); }}public class InheritanceExample { public static void main(String[] args) { Dog dog = new Dog(); dog.eat(); // 상위 클래스의 메서드 dog.bark(); // 하위 클.. 2024. 8. 5.
JAVA ORM - JPA(연관관계 매핑2) 연관관계를 맺기전 고려해야할 사항 으로는 방향성, 연관관계의 주인 설정, 데이터베이스 설계와 일치하는지 등여러가지 있다. 방향성단방향 : 하나의 엔티티만 다른 엔티티를 참조하는 경우. 순환 참조 문제 피할 수 있음.양방향 : 두 엔티티가 서로를 참조하는 경우. 주인과 비주인을 명확히 구분해야함.직전 포스팅에서 말했듯이 DB에서 테이블은 외래키 하나로 양쪽으로 조인가능함.(방향성이 딱히 존재하지 않음.)하지만 객체는 참조용 필드가 있어야만 있는쪽으로 참조가 가능해서 방향성이 존재함.양방향으로 객체를 설계하기 위해선 양쪽에 서로의 레퍼런스가 존재해야함.  주인 설정주인 : 외래키를 관리하는 엔티티, 외래 키 컬럼을 실제로 변경할 수 있음. @JoinColumn사용비주인: mapped by 속성 사용양방향 .. 2024. 8. 3.