NHibernate マッピングの書き方

2009/11/25 17:04Update
TAGS: NHibernate | hibernate.cfg.xml | 設定ファイル | マッピング

NHibernate のマッピング設定ファイル(XML、クラス、SQL)の書き方について。

マッピング設定ファイル


MyTable.hbm.xml
<?xml version="1.0"?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  namespace="NHibernate.Entity" assembly="TestNHibernate">

<class 
    name="MyTable" 
    table="MY_TABLE"
    lazy="false"
>
    <!-- ID -->
    <id
        name="Id"
        column="ID"
        length="32"
    >
        <generator class="uuid.hex" />
    </id>

    <!-- stringプロパティ -->
    <property
        name="Name"
        type="string"
        column="NAME"
        not-null="true"
        length="15"
    />

    <!-- intプロパティ -->
    <property
        name="Price"
        type="int"
        column="PRICE"
        not-null="false"
        length="4"
    />

    <!-- stringプロパティ -->
    <property
        name="Flag"
        type="string"
        column="FLAG"
        not-null="true"
        length="1"
    />

    <!-- timestampプロパティ -->
    <property
        name="UpdateDatetime"
        type="timestamp"
        column="UPDATE_DATETIME"
        not-null="true"
        length="3"
    />


</class>
</hibernate-mapping>


解説:
<hibernate-mapping>
①namespace:クラスのパッケージ相当
②assembly:アセンブリ名(DLL名)

<class>
①name:クラス名
②table:テーブル名

<property>
①name:クラス・フィールド名
②type:対応テーブル・フィールドの型
③column:対応テーブル・フィールド名
④not-null:NULL不可/可
⑤length:フィールドのレングス


対応テーブル


定義例:
CREATE TABLE MY_TABLE (
  ID VARCHAR(32) PRIMARY KEY NOT NULL,
  NAME VARCHAR(15) NOT NULL,
  PRICE INT(4),
  FLAG CHAR(1) NOT NULL,
  UPDATE_DATETIME TIMESTAMP NOT NULL
);

対応クラス


定義例:
MyTable.cs
using System;

namespace NHibernate.Entity {
    [Serializable]
    public class MyTable
    {
        //ID(プライマリ・キー)
        private string id;
        public string Id
        {
            get
            {
                return id;
            }
            
            set
            {
                this.id = value;
            }
            
        }


        //名前
        private string name;
        public string Name
        {
            get
            {
                return name;
            }
            
            set
            {
                this.name = value;
            }
            
        }

        //価格
        private Int32 price;
        public Int32 Price
        {
            get
            {
                return price;
            }
            
            set
            {
                this.price = value;
            }
            
        }

        //フラッグ
        private string flag;
        public string Flag
        {
            get
            {
                return flag;
            }
            
            set
            {
                this.flag = value;
            }
            
        }

        //タイムスタンプ
        private DateTime updateDatetime;
        public DateTime UpdateDatetime
        {
            get
            {
                return updateDatetime;
            }
            
            set
            {
                this.updateDatetime = value;
            }
            
        }


    }
}

.

有关作者
Syboos.jp編集長システム設計や開発、保守運営などを行ってます。オープンソース技術に興味があります。

Sponsored Link


Comments