JPA

    JPA에서 Entity에 protected 생성자를 만드는 이유.

    엔티티에서 setter를 쓰는 것보다 생성자를 통해 파라미터를 넘기는 게 좋다. Setter를 무분별하게 남용하다 보면 여기저기서 객체(엔티티)의 값을 변경할 수 있으므로 객체의 일관성을 보장할 수 없기 때문. 그리고 setter는 그 의도를 알기 힘들기에 setter 사용을 자제해야한다. 그러므로 protect 생성자를 생성해서 아무데나 생성되는 걸 막는 게 좋다. (다른 사람이 쓰지 못하도록 제약한다.) 예시) Member member = new member (); member .setname("민우"); member .setname("하진"); 그러나 JPA 표준 스펙에 디폴트 생성자가 있어야하기에 private 생성자를 사용할 수 없다. 왜냐하면 jpa가 프록시 기술을 쓰는데 거기서 프록시 기술을..

    Entity 올바른 수정은 무엇인가 ?

    변경 감지(Dirty Checking 방식) 스프링에서 EntityManger의 주요 기능 중 하나로 Dirty Check가 있다. EntityManger는 현재 트랜잭션에서 영속성 컨텍스트에 포함되어 있는 Entity객체에 수정이 발생할 경우, 트랜잭션이 커밋되는 시점에 내부적으로 UPDATE 쿼리를 생성하여 전달한다. 기본적으로 EntityManager의 find()나 createQuery() 메서드를 통해 조회는 Entity 객체는 영속성 컨텍스트에 포함된다. 따라서, persist() 메서드를 명시적으로 호출하지 않아도 된다. 그러나, EntityManager는 준영속 상태(Detached)의 Entity에 대해서는 Dirty Check를 수행하지 않는다. 만약, 사용자가 폼 정보를 기반으로 새로..

    JPA 영속성 컨텍스트란?

    영속성 컨텍스트란? 영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트의 특징 엔티티 매니저를 생성할 때 하나 만들어진다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있다. 엔티티 저장 em.persist(member); 엔티티 매니저를 사용해 회원 엔티티를 영속성 컨텍스트에 저장한다는 의미! 엔티티 찾기 em.find(Member.class,id); EntityManager에서 find를 하면 먼저 1차캐시에서 조회를 한 후 값이 있으면 DB를 조회하지 않고 ..