Web Framework)Hibernate-Introduction 중요 키워드

Jay Kim·2022년 1월 17일
0

Web Framework

목록 보기
7/10

<2>

[hibernate]

-ORM

-object-relational mismatch 종류 5가지
-> 세분성(granularity)), 상속(inheritance),일치성(identity), 순회(navigation), *연관(Associations)

-Association

-> 자바에서는 객체의 레퍼런스로 (방향성 존재) VS RDBMS에서는 외래키 이용해서(방향성 없음)
-> 종류 1) one to one/ one to many( join column 방법 , join table 방법- Set)

-hibernate 특징 및 장점

-hibernate architecture : DAO, Hibernate API, Hibernate, domian object, JDBC API, JDBC, SessionFactory

configuration -> session Factory -> session -> session이 JDBC 이용해 DB 접근

-Hibernate가 가지는 객체
1) configuration object : 2가지 정보 가짐

  1. db connection information( hibernate.cfg.xml)

2.mappign information(mapping class) ->
@Entity,
@Table(name="product"),@Id,@GeneratedValue,@Coumn(name="pro_id"), @ManyToOne(cascade=CascadeType.ALL),@JoinColumn(name="cat_id")

2)SessionFactory Object : SessionFactory.openSession() / SessionFactory.getCurrentSession()

@Transactional
public class PersonService{
	@Authowired
  private SessionFactory sessionFactory;
  
  public Person edit(Integer id) {
  	Session session = sessionFactory.getCurrentSession();
      Person person = (Person) session.get(Person.class, id);
   
   	session.update(person);
      
      return person;
  }
}

3)Session Object : DB의 매핑된 entity class의 인스턴스에 대하여 CRUD operation 수행 , DB와 Session 사이에 cache 존재 ->flush() 필요

-3-1) Object States : entity classes 인스턴스들의 객체 상태 3가지

Transient (DB와 연결 안된 new 인스턴스) -> persistent (session과 연결된 상태) -> Detached (연결 해제됨)

Transient에서 save() or saveOrUpate() -> persistent됨
Persistent에서 delete() -> 다시 Transient됨
Persistent에서 close() -> Detached됨
Detached에서 update() or saveOrUpate() -> 다시 persistent됨
Persistent 상태에서 save() 안 해도 변경사항 DB에 저장됨

-3-2) Session Methods : get(), saveOrUpdate(), delete(), flush(), close() , createQuery()

get() : class에 매핑되는 table에서 id에 해당하는 레코드 읽어서 persistent 인스턴스 반환
save() : 객체 저장 + cascade="save-update"하면 연관된 것도 저장
saveOrUpeate() : DB에 이미 있으면 save() 대신
delete() : DB에서 제거 + cascade="delete"하면 연관된 것도 삭제
flush() : session 메모리에 있는 persistent 객체와 DB와 실제로 동기화 / 트랜잭션 커밋하고 세션 닫기 전에 호출해야함
flush mode ) Always, Commit, Manual, Auto -> hibernate.cfg.xml에서 설정

  <property name="org.hibernate.flushMode" value ="COMMIT"/>

close() : spring이 해주긴 함
createQuery() : HQL 사용하여 쿼리 객체 생성 (table/column명 대신 class명,멤버변수 사용)

Query<Product> theQuery = session.createQuery("from Product", Product.class); //쿼리 생성
List<Product> products = theQuery.getResultList(); //쿼리 사용

4)Transaction Object
하나의 작업으로 봄 -> 모든 commit 성공해야 transcation 성공/ 실패 시 rollback으로 다시

5)Query Object : Session.createQuery()에 의해 객체 얻음

query.getResultList();//조회 , query.executeUpdate()//업데이트
*update/delete query 시 주의 : 타입 명시 없는 대신 @suppressWarnings("rawtypes") 넣기 

0개의 댓글