私はNHibernate(最新バージョンを使用)が初めてで、汎用データロードアプリケーションのオブジェクトをデータベースにマッピングする際に問題があります。データベースはサードパーティであるため、そこに変更を加えることはできません。
私たちの目的は次のとおりです。
public class GenericObjectValue
{
public string ObjectId { get; set; }
public string ObjectTypeId { get; set; }
public string measurementId { get; set; }
public DateTime timestamp { get; set; }
public Double Value { get; set; }
}
使用するデータソース テーブル:
Table t_data_point
(
id (PK, int, not null)
object_id (FK, Varchar(30), not null)
object_type_id (FK, Varchar(30), not null);
measurement_id (FK, Varchar(30), not null);
)
Table t_data_point_Value
(
data_point_id (PK, FK, int, not null)
timestamp (PK, FK, datetime, not null)
version (PK, FK, int, not null)
value (numeric(18,6), not null);
)
私が設定したマッピングは次のとおりです。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Phoenix.Model" assembly="Phoenix.Common">
<class name="MeasValue" table="t_data_point_Value">
<id column="data_point_id" type="int" />
<property name="Timestamp" column="timestamp "/>
<property name="Value" column="value"/>
<join table="t_data_point">
<key column="id" />
<property name="measurementId" column="measurement_id" />
<property name="ObjectId" column="object_id" />
<property name="ObjectTypeId" column="object_type" />
</join>
</class>
</hibernate-mapping>
私が何か愚かなことをしているのか、それとも不可能なことをしているのかはわかりませんが、このコードを実行すると正しい数の結果が返されますが、結果は最初に返された結果の複製です。つまり、タイムスタンプと値は同じ。
さらに情報が必要な場合は、お知らせください。