INSERT INTO ... SELECT ...
HQLでクエリを作成しようとしています。ただし、挿入しているクラスには<component>
、マッピングに項目が含まれています。たとえば、私のクラス定義は次のようになります。
public class X
{
public virtual string A { get; set; }
public virtual string B { get; set; }
public virtual Y C { get; set; }
}
public class Y
{
public virtual string C1 { get; set; }
public virtual string C2 { get; set; }
}
そして可能なマッピング:
<class name="X">
<id type="int"><generator class="identity"/></id>
<property name="A" />
<property name="B" />
<component name="C">
<property name="C1" column="C1" />
<property name="C2" column="C2" />
</component>
</component>
</class>
このクラスの挿入クエリをHQLで作成するにはどうすればよいですか?私は試した:
session.CreateQuery("INSERT INTO X(A, B, C1, C2) SELECT A, B, 'foo', 'bar' FROM X data")
.ExecuteUpdate();
これにより、エラーが発生します。
NHibernate.QueryException : could not resolve property: C1 of: X
[INSERT INTO X(A, B, C1, C2) SELECT A, B, "foo", "bar" FROM X data]
私も試しました:
session.CreateQuery("INSERT INTO X(A, B, C) SELECT A, B, :C FROM X data")
.SetParameter("C", new Y() { C1 = "foo", C2 = "bar" });
.ExecuteUpdate();
これにより、エラーが発生します。
NHibernate.HibernateException : Could not determine a type for class: Y
私も試しました:
session.CreateQuery("INSERT INTO X(A, B, C.C1, C.C2) SELECT A, B, 'foo', 'bar' FROM X data")
.ExecuteUpdate();
これにより、エラーが発生します。
NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : Exception of type 'Antlr.Runtime.MismatchedTreeNodeException' was thrown. near line 1, column 21
[INSERT INTO X(A, B, C.C1, C.C2) SELECT A, B, "foo", "bar" FROM X data]
他に何か提案はありますか?