索引一个简单的 Java 记录
Indexing a simple Java Record
我有一个 Java 对象 Record
。它表示作为 SQL 执行结果的单个记录。 CQEngine 可以索引 Record
的集合吗?
我的 class 的形式是
public class Record {
private List<String> columnNames;
private List<Object> values;
... Other getters
}
我已经查看了一些示例,但我没有运气。
我只想用名称和相应的值索引特定的列。这可以使用 cqengine 实现吗,或者是否有任何其他替代方法可以实现相同的目标。
谢谢。
这似乎是一种奇怪的数据建模方式,但如果您愿意,可以将 CQEngine 与该模型一起使用。
(首先,CQEngine 不会使用您的列名,因此您可以删除该字段。)
为此,您需要为值列表中的每个索引定义一个 CQEngine virtual attribute。
每个属性都需要使用将存储在 column/index 中的数据类型来声明,并且需要能够将值列表中该索引处的对象转换为适当的数据类型(String
、Double
、Integer
等)。
假设您的 Record
有一个名为 'price' 的列,其类型为 Double
,并存储在索引 5
在值列表中。您可以定义一个如下所示的属性:
public static final Attribute<Record, Double> PRICE =
attribute("PRICE", record -> ((Double) record.values.get(5));
如果这听起来很复杂,那是因为数据建模的方式让事情变得有点复杂 :) 使用利用 Java 类型系统(您的模型没有)的数据模型通常更容易.因此,您需要自己以编程方式跟踪每个字段的数据类型等。
CQEngine 本身将与该模型一起工作,因为在一天结束时 CQEngine 属性不需要读取 字段 ,属性只是被编程的函数获取值。
还有很多上面没有提到的东西。例如,您的值可以为空吗? (如果是这样,您应该使用 CQEngine docs 中讨论的 nullable 各种属性。或者,您的每个 Record
对象可能有不同的列集吗? (如果是这样,您可以在遇到新列时创建属性on-the-fly,但您可能应该在某处缓存您创建的属性)。
希望对您有所帮助,
Niall(CQEngine 作者)
我有一个 Java 对象 Record
。它表示作为 SQL 执行结果的单个记录。 CQEngine 可以索引 Record
的集合吗?
我的 class 的形式是
public class Record {
private List<String> columnNames;
private List<Object> values;
... Other getters
}
我已经查看了一些示例,但我没有运气。
我只想用名称和相应的值索引特定的列。这可以使用 cqengine 实现吗,或者是否有任何其他替代方法可以实现相同的目标。
谢谢。
这似乎是一种奇怪的数据建模方式,但如果您愿意,可以将 CQEngine 与该模型一起使用。
(首先,CQEngine 不会使用您的列名,因此您可以删除该字段。)
为此,您需要为值列表中的每个索引定义一个 CQEngine virtual attribute。
每个属性都需要使用将存储在 column/index 中的数据类型来声明,并且需要能够将值列表中该索引处的对象转换为适当的数据类型(String
、Double
、Integer
等)。
假设您的 Record
有一个名为 'price' 的列,其类型为 Double
,并存储在索引 5
在值列表中。您可以定义一个如下所示的属性:
public static final Attribute<Record, Double> PRICE =
attribute("PRICE", record -> ((Double) record.values.get(5));
如果这听起来很复杂,那是因为数据建模的方式让事情变得有点复杂 :) 使用利用 Java 类型系统(您的模型没有)的数据模型通常更容易.因此,您需要自己以编程方式跟踪每个字段的数据类型等。
CQEngine 本身将与该模型一起工作,因为在一天结束时 CQEngine 属性不需要读取 字段 ,属性只是被编程的函数获取值。
还有很多上面没有提到的东西。例如,您的值可以为空吗? (如果是这样,您应该使用 CQEngine docs 中讨论的 nullable 各种属性。或者,您的每个 Record
对象可能有不同的列集吗? (如果是这样,您可以在遇到新列时创建属性on-the-fly,但您可能应该在某处缓存您创建的属性)。
希望对您有所帮助, Niall(CQEngine 作者)