在对Cassandra表进行重新更改后,我在C#中遇到了麻烦。原始主键由2部分组成((person_id),car_id),这不足以识别单行,因此密钥扩展((person_id),car_id,purchase_date)。
为person_id(BIGINT), car_id(BIGINT), PURCHASE_DATE(timeuuid)
在此更改后,我遇到了一些java错误
2016-01-04 14:24:42.2935 |错误| MyModule |在工作时出错java.lang.RuntimeException:无法在org.apache.cassandra.db.marshal.CompositeType中获取比较器2(org。 apache.cassandra.db.marshal.ReversedType(org.apache.cassandra.db.marshal.TimeUUIDType),org.apache.cassandra.db.marshal.UTF8Type)。这可能是由于架构和数据读取不匹配
我正在使用datastax 2.7.0.0,而我的查询正在检索一个人的所有记录:
this.storage.GetEntityList<MyEntity>(r => r.PersonId== personid);
public virtual IEnumerable<T> GetEntityList<T>(Expression<Func<T, bool>> predicate)
{
return new Table<T>(this.Session)
.Where(predicate)
.Execute();
}
public class MyEntity
{
[PartitionKey]
[Column("person_id")]
public long PersonId{ get; set; }
[ClusteringKey]
[Column("car_id")]
public long CarId{ get; set; }
[ClusteringKey(1)]
[Column("purchase_date")]
public TimeUuid PurchaseDate{ get; set; }
如果我用带有SimpleStatement的cql查询数据库,它就像魅力(ironi),但我不在乎。我想知道为什么我的解决方案失败了。
答案 0 :(得分:1)
G Cassandra TimeUUIDType的等效C#是System.Guid。请参阅CQL data types to C# types。
ClusteringKey属性构造函数可以使用SortOrder参数。你应该试试:
[ClusteringKey(1, SortOrder.Descending)]
[Column("purchase_date")]
public Guid PurchaseDate{ get; set; }