JAVA

    JPA 지연로딩

    JPA 지연로딩 문제 jpa를 이용해서 엔티티의 연관 객체를 지연로딩(fetch = FetchType.LAZY)로 선택한 경우, 트랜잭션 범위 밖에서 로딩되지 않은 객체를 조회할 경우 exception 이 발생한다. 위 방법을 해결하기 위한 방법을 알아보자. 즉시로딩 설정 FetchType.EAGER 로 설정하면 즉시 로딩 전략으로 트랜젝션 밖인 프레젠테이션 계층 등에서 조회시 문제가 발생하지 않는다. 즉시로딩이지만, 사용하지 않는 프레젠테이션 계층에선 필요없는 데이터까지 조회하게 된다. em.find()를 이용하는 경우 문제가 발생하지 않지만, jpql을 사용하는 경우 N+1 문제가 발생한다. jpql을 이용해 select m from Member m 을 실행하면 Member만 가져온후, Member수..

    JPA @ManyToMany

    객체간 다대다 연관간계를 직접 매핑할 때 사용한다. 당연하지만 RDB 에는 직접 다대다 연관관계를 지정할 수 없기 때문에 중간 연결테이블이 있다. @Entity public class Category { @ManyToMany @JoinTable(name = "CATEGORY_ITEM", joinColumns = @JoinColumn(name = "CATEGORY_ID"), inverseJoinColumns = @JoinColumn(name = "ITEM_ID)) private List items = new ArrayList(); } @Entity public class Item { @ManyToMany(mappedBy = "items") private List categories = new ArrayLi..

    JPA @Inheritance

    @Inheritance JPA 를 사용하여 Entity를 정의할 때 상속구조를 사용하기 위해 선언한다. ex) @Entity @Inheritance(strategy = InheritanceType.SINGLE\_TABLE) @DiscriminatorColumn(name = "DTYPE") public abstract class Item { @GeneratedValue private long id; ...... } @Entity @DiscriminatorValue("B") public class Book extends Item { private String author; ..... } @Inheritance annotation 으로 상속하여 사용하는 부모 객체임을 선언한다. InheritanceType 종..

    JPA CASCADE 종류

    CascadeType.RESIST – 엔티티를 생성하고, 연관 엔티티를 추가하였을 때 persist() 를 수행하면 연관 엔티티도 함께 persist()가 수행된다. 만약 연관 엔티티가 DB에 등록된 키값을 가지고 있다면 detached entity passed to persist Exception이 발생한다. CascadeType.MERGE – 트랜잭션이 종료되고 detach 상태에서 연관 엔티티를 추가하거나 변경된 이후에 부모 엔티티가 merge()를 수행하게 되면 변경사항이 적용된다.(연관 엔티티의 추가 및 수정 모두 반영됨) CascadeType.REMOVE – 삭제 시 연관된 엔티티도 같이 삭제됨 CascadeType.DETACH – 부모 엔티티가 detach()를 수행하게 되면, 연관된 엔티티..

    JAVA Optional 기초

    변수 선언 //null을 담고있는(비어있는) Optional 객체 Optional 변수명 = Optional.empty(); //null이 아닌 객체름 담는 Optional 객체, null이 넘어오면 NPE를 던지므로 조심해서 사용해야 한다. Optional 변수명 = Optional.of(param); //null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체를 생성, null이 넘어올 경우 NPE를 던지지 않고, 비어있는 Optional 객체를 얻어온다. Optional 변수명 = Optional.ofNullable(변수); Optional이 담고 있는 객체 접근 //Optional 이 담고 있는 객체 접근 .get() //비어있는 Optional 객체에 대해서 other를 반환 ..

    자바에서 제공하는 함수형 인터페이스

    UnaryOperator T의 파라미터 타입과 리턴타입을 갖는다. 추상메소드 apply를 가진다. Function T는 파라미터 타입, R은 리턴타입이다. 추상메소드 apply() 를 가진다. Predicate boolean을 리턴하는 함수형 인터페이스다. 추상메소드 test() 를 가진다. Consumer 리턴이 없는 형태이다. 추상메소드 accept() 를 가진다. Supplier 파라미터가 없는 형태이다. 추상메소드 get() 를 가진다.이를 이용해 Lazy Evalutioan이 가능하다. BiConsumer 파라미터를 두개 받는 Consumer, 리턴이 없다. BiFunction 파라미터를 2개 받고 리턴타입을 한개 받는다. BinaryOperation T타입으로 두개의 파라미터를 받고, T타입을..

    자바 스트림 기초 사용법

    Filtering 필터(filter)은 스트림 내 요소들을 하나씩 평가해서 걸러내는 작업을 수행. 인자로 받는 Predicate 는 boolean 을 리턴하는 함수형 인터페이스로 평가식이 들어가게 된다. Stream filter(Predicate