【发布时间】: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" +
")");
【问题讨论】:
-
5.0 不支持嵌套字段访问。我们现在正在工作,并希望在 Hazelcast 5.1 中发布它。见github.com/hazelcast/hazelcast/pull/19954
标签: java sql hazelcast hazelcast-imap hazelcast-jet