ORM(Object Relation Mapping)
애플리케이션의 클래스와 SQL 데이터베이스 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용하여 애플리케이션의 객체를 데이터배이스 테이블에 자동으로 영속화해주는 기술이다
장점
생산성
데이터 입출력이 간편하다
유지보수성
코드가 간결해져 유지보수하기 쉽다
성능
SQL단건만 보면 ORM이 더 느릴수 있다
Hibernate는 객체와 테이블 사이에 캐시가 존재해 쿼리를 줄일 수 있다
성능 최적화를 위한 여러가지 기능 제공
벤더 독립성
데이터베이스가 바뀌어도 코드가 변경되지 않는다
단점
학습비용이 높다
SQL, Hibernate다 잘알아야한다
상속
객체는 상속이라는 기능을 가지고 있지만 데이터베이스는 상속이라는 기능이 없다
연관관계
객체는 참조가 있는 방향으로만 조회할수 있지만, 데이터베이스는 외래키 하나로 양 방향으로 조회할 수 있다
객체 그래프 탐색
객체는 언제든 참조를 사용해서 연관된 팀을 찾을수 있지만 데이터베이스는 처음 실행하는 SQL에 따라 객체 그래프를 어디까지 탐색할 수 있는지 정해진다
member.getOrder().gerOrderItem();
비교
데이터베이스는 기본 키의 값으로 각 row를 구분하지만, 객체는 동일성 비교(==)와 동등성 비교(equals())라는 두가지 방법이 있다
@Entity
→ Entity 생성시 기본 생성자 protected로 필요한 이유 프록시를 만들기 위해
@Entity(name="myAccount")
@Table
@Table(name = "myTable")
@Id
@GeneratedValue
@Column
@Transient
@Entity
public class Account {
@Id @GeneratedValue
private Long id;
@Column(name = "name")
private String username;
private String password;
//...
}