[JPA강좌,
엔티티, Entity,JPQL이란]
엔티티(Entity)
n JPA의 엔티티는 테이블을 객체로 표현한 자바 클래스이다. 이
엔티티의 인스턴스는 테이블의 행을 나타내고 대체로 다른 엔티티와 관계를 맺고 있고 이러한 관계(오브젝트/관계) 메타데이터는 클래스에 어노테이션(@ManyToOne, @OneToOne,
@ManyToOne, @ManyToMany)을 기술하거나 XML 파일 등에서 설정할 수
있다. 이러한 엔티티는 구현 클래스 또는 추상 클래스가 될 수 있으며 특성 또는 필드를 사용하여
상태를 관리한다.
n JPQL(Java Persistence Query Language)은 지속적 엔티티를 저장하는 데 사용되는
메커니즘과 독립적으로 지속적 엔티티에서 검색을 정의하는 데 사용되는데 데이터베이스와 관련된 SQL을 사용하지 않고 오브젝트를 검색하는 언어이다.
n 엔티티의 4가지 생명주기
ü 비영속
객체(new/transient) : new 키워드를 생성한 엔티티 객체를 말하며 Managed 상태가 아닌 것을 말한다.
ü 영속
객체(managed) : new 이후 perist 메소드를
이용해서 저장한 경우 또는 DB의 데이터를 find나 query등으로 조회한 경우인데 영속성 컨텍스에 저장된
상태이다.
ü 삭제
객체(removed) : 영속객체 즉 Managed 상태인
객체를 remove 메소드로 삭제한 경우, 작업이 커밋되는
시점에 DB에 동기화 된다.
ü 준영속
객체(detached) : 트랜잭션이 커밋되었거나 clear,
flush 메소드가 실행된 경우 모든 영속객체의 상태는 준영속 상태(Detached) 상태가 된다. 영속성 컨텍스트에서 분리된
상황이며 merge 메소드로 다시 영속객체가 될 수 있다.
n 엔티티(영속클래스, Persistent Class)는 JPA가 생성할 때 기본 생성자를 이용하므로 반드시 기본 생성자를 가져야 하며 식별자 프로퍼티(@Id)가 반드시 존재 해야 한다.
n final 클래스는 엔티티가 될 수 없다. Proxy를 생성할 때
자식클래스 형태로 만드는데 final 클래스는 상속되지 않는 클래스이므로 불가하다. 만약 final 메소드를 가진 클래스를 엔티티로 사용하려면
명시적으로 lazy=“false”로 설정해서 Proxy 생성을 막아야 한다.
n 하이버네이트는
기본적으로 자바빈의 프로퍼티를 테이블의 칼럼에 매핑하며 getter/setter 메소드를 자동
인식한다.
n 하이버네이트에서는
기본적으로 동일한 세션에서만 엔티티 객체에 대해 데이터베이스 동일성 과 자바 동일성을 보장하므로 여러 세션에서 같은 객체로 인식되게 하기
위해서는 equals(), hashCode()를 오버라이딩 해야 한다.특히 엔티티(영속 클래스)를 컬렉션 등에 담을 때는 반드시 위해서는 equals(),
hashCode()를 구현해야 한다.
n @Entity, @Table 어노테이션을 이용하여 엔티티와 테이블을 매핑한다.
댓글 없음:
댓글 쓰기