Thank you for the answer! It helped. I discovered two functions that can help in controlling the way ignite the attributes onto table aliases.
QueryEntity.addQueryField("homeAddress.zip", "java.lang.String", "ha_zip") would allow programmatically define the "homeAddress.zip" field in the table and map it to "ha_zip" alias. QueryEntity.setAliases(new HashMap<String, String>(){{put("homeAddress.zip", "ha_zip");}}) would allow creating "ha_zip" alias for the field "homeAddress.zip" that has already been defined. CacheConfiguration.setIndexedTypes() is what I was trying to use before with @QuerySqlField annotations on the object classes and that what did not work for the field clashes. It seems like a defect in the code when the filed name clashes are not being resolved or even indicated. The goal of all these is to be able to run a query on a simple model with multiple nested objects (which could possibly clash on some attributes). Yes, the RDBMS tables are flat, but Ignite is not RDBMS, but a K-V store with SQL query capabilities. Ignite permits using complex object structures as cache values and advertises a capability to query on those. Again, thanks a lot for your help! -- Sent from: http://apache-ignite-users.70518.x6.nabble.com/