본문 바로가기

Java192

값 타입 컬렉션 대신 실무에서 쓰는 방법 만약 List 같은 값 타입 컬렉션이 필요한 경우 값 타입 컬렉션을 Entity로 승급시킨다.@Entity@Getter@Table(name = "ADDRESS")public class AddressEntity { @Id @GeneratedValue private Long id; private Address address; public AddressEntity(String city, String street, String zipcode) { this.address = new Address(city, street, zipcode); } public AddressEntity() {}} address는 값타입으로 만들었다. (position, x.y좌표 정도 할때만 .. 2023. 11. 20.
영속성 전이 : CASCADE 영속성 전이는 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공해준다 (ex.부모 엔티티 저장시에 자식 엔티티도 함께 저장) @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) private List childList = new ArrayList(); cascade 속성을 사용할 수 있는 경우: 하나의 부모가 자식들을 관리할때, ex)parent 말고 member가 child를 알게되면 쓰면 안된다.... 단일 엔티티에 완전히 종속적일때(소유자가 하나일때), life cycle 동일할때(등록,삭제) ex 게시판-첨부파일 경로(다른 엔티티랑 관련 있으면 쓰면 안됨. 소유자가 하나일때만 사용) 고아객체제거 : 부모 엔티티와 연관관계가 끊.. 2023. 11. 17.
프록시, 즉시로딩 주의 JPA에서는 ==비교 대신 instance of 사용하기~(프록시객체랑 그냥 객체 == 비교하면 false나옴) (instanceOf 연산자는 객체가 어떤 클래스인지, 어떤 클래스를 상속받았는지 확인하는데 사용하는 연산자) /* TRUE Member m1 = em.find(Member.class, member1.getId()); Member m2 = em.find(Member.class, member2.getId()); System.out.println("m1 == m2" + (m1.getClass() == m2.getClass())); */ Member m1 = em.find(Member.class, member1.getId()); Member m2 = em.getReference(Member.clas.. 2023. 11. 17.
@MappedSuperclass id,name 등 공통 매핑 정보가 필요할 때 사용, 엔티티가 아님에 주의!단순히 엔티티가 공통으로 사용하는 매핑정보를 모으는 역할@MappedSuperclasspublic abstract class BaseEntity { private String createBy; private LocalDateTime createdDate; private String lastModifiedBy; private LocalDateTime lastModifiedDate; 속성만 상속받을 때 쓰는 MappedSuperclass부모 클래스를 상속 받은 자식 클래스에 매핑 정보만 제공한다. 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장함.필드 예시는 운영 시 기본으로 깔려야하는 녀석들. 나중에 Sp.. 2023. 11. 17.
상속관계 테이블 설계 전략 조인 전략을 기본으로 확장할 일도 없을거같고 데이터도 넘 단순하다 -> 싱글 테이블 전략 근데, 비즈니스적으로 중요하고 복잡하다 -> 조인 테이블 전략@Inheritance(strategy=InheritanceType.JOINED : 조인전략SINGLE_TABLE : 단일 테이블 전략@DiscriminatorColumn(name="DTYPE") : 싱글테이블 사용 시 필수. DTYPE을 만들어주는 어노테이션. 어떤 구체적인 서브타입인지(ex.Book,Movie...) 알려준다.@DiscriminatorValue("XXX") : 따로 지정하지 않으면 기본으로 엔티티 이름을 사용한단일 테이블 전략 단점 : 자식 엔티티가 매핑한 컬럼은 모두 null 허용 2023. 11. 17.
연관관계 매핑(양방향) 가급적이면 단방향으로 설계하시오!단방향 매핑만으로도 이미 객체랑 테이블 연관관계 매핑은 완료.단방향 매핑을 잘하고 양방향은 필요할 때 추가해라.(양방향 매핑은 반대방향으로 조회 기능(객체 그래프 탐색)이 추가된 것 뿐임) 실무에서는 JPQL에서 역방향으로 탐색할 일이 많음. 필요할 때 추가하면 됨. (테이블에 영향 없음) @Entity @Getter @Setterpublic class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String name; @OneToMany(mappedBy = "team") // Member의 Team타입의 변수명 private List member.. 2023. 11. 15.