【问题标题】:How to query embedded object field with sql from hazelcast?如何使用hazelcast中的sql查询嵌入对象字段?
【发布时间】:2022-01-14 09:28:11
【问题描述】:

我正在尝试使用 sql 方法从 hazelcast 中获取复杂的 java 对象。

我的数据对象包含嵌入式对象,如

Person{
    ...
    HumanName name;
    ...
}
HumanName {
    String firstName;
}

我正在尝试使用 sql 获取这个 firstName 字段。

SqlResult result = hz.getSql().execute("SELECT p.id, p.name.firstName FROM Patient as p ");

它说“在表 p 中找不到列 'name.firstName'”

我知道可以用谓词来达到,比如

patientIMap.values( Predicates.equal( "name.firstName", "John" ));

但谓词似乎不适用于我的情况,因为我还需要执行 Map 连接,而谓词似乎是不可能的。

我还添加了以下映射:

ClientConfig clientConfig = new ClientConfig();
ClientUserCodeDeploymentConfig clientUserCodeDeploymentConfig = new ClientUserCodeDeploymentConfig();


clientUserCodeDeploymentConfig.addClass("com.example.model.Patient");
clientUserCodeDeploymentConfig.addClass("com.example.model.HumanName");
clientUserCodeDeploymentConfig.setEnabled(true);
clientConfig.setUserCodeDeploymentConfig(clientUserCodeDeploymentConfig);


SerializationConfig serializationConfig = clientConfig.getSerializationConfig().setEnableSharedObject(true);
clientConfig.setSerializationConfig(serializationConfig);
var hz = HazelcastClient.newHazelcastClient(clientConfig);

hz.getSql().execute("CREATE MAPPING \"Patient\" EXTERNAL NAME \"Patient\"\n" +
                "TYPE IMap\n" +
                "OPTIONS (\n" +
                "  'keyFormat' = 'java',\n" +
                "  'keyJavaClass' = 'java.lang.String',\n" +
                "  'valueFormat' = 'java',\n" +
                "  'valueJavaClass' = 'com.example.model.Patient'\n" +
                ")");

【问题讨论】:

标签: java sql hazelcast hazelcast-imap hazelcast-jet


【解决方案1】:

5.0 不支持嵌套字段访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2020-10-07
    • 1970-01-01
    • 2018-08-08
    • 2016-07-12
    相关资源
    最近更新 更多