NHibernate 설정 및 HBM Mapping(2)

|

Database Table : TbSrcMach

COLUMN

TYPE

SIZE

 MachTag(Pk)

Number

4

MachName

VARCHAR

5

MachCode

Number

3

위와 같은 DB Table 구성의 HBM mapping xml 구성시 필요한 model과 mapping은 아래와 같다.


TbSrcMach model

    public class TbSrcMach
    {
        public virtual int MachTag { get; set; }
        public virtual string MachName { get; set; }
        public virtual int MachCode { get; set; }
    }


TbSrcMach.hmb.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DBRepository" namespace="DBRepository.model">
  <class name="TbSrcMach" table="TbSrcMach">
    <id name="MachTag" column="MachTag" type="Int32" length="4">
      <generator class="native"/>
    </id>
    <property name="MachName" column="MachName" type="string" length="15" not-null="true"/>
    <property name="MachCode" column="MachCode" type="Int32" length="3" not-null="true"/>
  </class>
</hibernate-mapping> 


TbSrcMach model의 namespace는 "Assembly.path" 형식으로 구성되며 model의 Class와 Table을 mapping 하기 위한 xml은 위와 같이 구성 하였다.

class name 항목은 model의 Class를 지정해 주며 Table은 DB Table명을 기입해 준다.

id는 하나의 키를 갖는 Table일경우 사용하며 다중키를 가질경우 composite-id Tag를 이용하여 정의 한다.


이제 Data를 조회할 Repository Pattern Class를 정의한다.

TbSrcMachRepository.cs


public class TbSrcMachRepository : NHibernateRepository<TbSrcMach>
    {
        public IList<TbSrcMach> GetMachForName(string Name)
        {
            using(var transaction = session.BeginTransaction())
            {
                //IList<TbSrcMach> rtnVal = session.CreateQuery("from TbSrcMach where MachName = :MachName ").SetParameter("MachName", Name).List<TbSrcMach>();
                //IList<TbSrcMach> rtnVal = session.CreateCriteria<TbSrcMach>().Add(Restrictions.Eq("MachName", Name)).List<TbSrcMach>();
                var query = session.QueryOver<TbSrcMach>();
                query.Where(d => d.MachName == Name);
                return query.List<TbSrcMach>();
            }
        }
    }

위 정의한 Class의 주석 CreateQuery, CreateCriteria Method는 그 밑에 정의한 QueryOver와 같은 기능을 한다.

QueryOver일 경우 MagicString을 제거하여 온전한 Code Type을 제공하여 준다.

And