1
プライマリキーとして使用したクラスの特定のプロパティを何らかの方法でクエリできるかどうかは疑問です。 私の考えは、以下のコードのようなものでした。 _key.NAMEで、私はあまりにもTestOjectPK.NAMEてみましたが、成功せず、私が受信したエラーメッセージはカラムが存在しないと言って:Apache Igniteプライマリキーで構成されたSQLクエリ
var fieldsQuery = new SqlFieldsQuery("select _val,_key from TestObject where _key.NAME= ? and VALUE= ?", "name1","value");
IQueryCursor<IList> queryCursor = cache.QueryFields(fieldsQuery);
これは3列、それらの2と一定のテーブルを表現するために私のクラスですPKです。
class TestObjectPK : IBinarizable
{
private Int32 id;
private String name;
[QuerySqlField]
public string NAME
{
get{return this.name;}
set{this.name = value;}
}
[QuerySqlField]
public Int32 ID
{
get{return this.id;}
set{this.id = value;}
}
public void WriteBinary(IBinaryWriter writer)
{
writer.WriteInt("ID", ID);
writer.WriteString("NAME", NAME);
}
public void ReadBinary(IBinaryReader reader)
{
ID = reader.ReadInt("ID");
NAME = reader.ReadString("NAME");
}
public override int GetHashCode()
{
return id.GetHashCode() + name.GetHashCode();
}
public override bool Equals(object obj)
{
return id == ((TestObjectPK)obj).id && name == ((TestObjectPK)obj).NAME;
}
}
class TestObject : IBinarizable
{
private String value2;
[QuerySqlField]
public String VALUE
{
get { return this.value2; }
set { this.value2 = value; }
}
public void WriteBinary(IBinaryWriter writer)
{
writer.WriteString("VALUE", VALUE);
}
public void ReadBinary(IBinaryReader reader)
{
VALUE = reader.ReadString("VALUE");
}
public override int GetHashCode()
{
return VALUE.GetHashCode();
}
public override bool Equals(object obj)
{
return VALUE == ((TestObject)obj).VALUE;
}
}
ありがとうございます。
パベル私はあなたが言ってみました。しかし、IgniteはまだNAME列に関連したエラーをスローしません。たぶん、私はキャッシュを作成したときにエラーが発生しますか? 'ICache cache = ignite.GetOrCreateCache (新しいCacheConfiguration(" TestObject "、typeof(TestObject))); TestObjectPK testObjectPK = new TestObjectPK(); testObjectPK.NAME = "h1"; testObjectPK.ID = 1; TestObject testObject = new TestObject(); testObject.VALUE = "value1"; cache.Put(testObjectPK、testObject); ' ありがとう –
John
クエリでキーフィールドを使用するには、キータイプも指定する必要があります:'新しいCacheConfiguration( "TestObject"、新しいQueryEntity(typeof(TestObjectPK)、typeof(TestObject ))) ')。私は答えを編集しました。 –
ありがとうございます。同じ質問がある人は、私は完全な例でGitHubリポジトリを作成しました:https://github.com/juanpale/ExampleApacheIgniteQueryCompositeObjectNET – John