Hibernate 사용하기

1. 객체를 이용하여 저장하는 방법
           Transaction tx = session.beginTransaction();
           Cafe cafe = new Cafe();
           cafe = new Cafe();
           cafe.setId(Id);
           cafe.setName(name);
           session.save(cafe);
           tx.commit();


2. key 값을 이용해 값이 존재하는지 확인한 후 저장하는 방법
       Session session = HibernateUtil.getCurrentSession();

       Cafe existCafe = (Cafe) session.get(Cafe.class, grpId);
       
       if (existCafe == null) {
           Transaction tx = session.beginTransaction();
           Cafe cafe = new Cafe();
           cafe = new Cafe();
           cafe.setId(id);
           cafe.setName(name);
           session.save(cafe);
           tx.commit();
           System.out.println("inserted");
       }
       else{
           System.out.println("already exist");
       }

       HibernateUtil.closeSession();

3. key가 아닌 값을 이용해 존재하는지 확인한 후 저장하는 방법
* createQuery 안의 문장은 SQL Query가 아니라 Hibernate에서 사용하는 HQL(Hibernate Query Language) 이다.
  * 자세한 문법은 http://www.hibernate.org/hib_docs/v3/reference/ko/html/queryhql.html

       Session session = HibernateUtil.getCurrentSession();

       Keyword k = (Keyword) session.createQuery(
               "select k from Keyword as k where keyword = ?").setString(0,
               keyword).uniqueResult();
       if (k == null) {
           Transaction tx = session.beginTransaction();
           Keyword kw = new Keyword();
           kw.setKeyword(keyword);
          
           session.save(kw);
           tx.commit();
           System.out.println("inserted");
       } else {
           System.out.println("already exist");
       }

       HibernateUtil.closeSession();

4. 자동 증가값 받기
* 걍 강제 casting
   int id = (Integer) session.save(kw);

5. DB의 identity 컬럼 관련 XML 설정
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.daum.cafe.search.weblog.entity">
   <class name="Keyword" table="tKeyword">
       <id name="id" column="id">
           <generator class="identity" />
       </id>
       <property name="keyword" type="string" column="keyword" />
   </class>
</hibernate-mapping>

6. 복합키 관련 XML 설정
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.daum.cafe.search.weblog.entity">
   <class name="DTBC" table="tableD">
       <composite-id>
           <key-property name="Id" type="int" column="Id" />
           <key-property name="keywordId" type="int" column="keywordId" />
       </composite-id>
       <property name="count" type="int" column="count" />
   </class>
</hibernate-mapping>
* 참고 : 복합키를 구현하려면 Serializable을 반드시 implements해 주어야 한다. 그렇지 않으면 'composite-id class must implement Serializable' 예외가 발생한다.

+ Recent posts