所以我使用带有 Hibernate 插件的 GigaSpaces XAP 将我的数据库表加载到他们的网格缓存中,不幸的是,对于查询网格,他们不支持直接不区分大小写的搜索。
他们提供了 2 个解决方案:
1- 使用慢的 LIKE 查询(与 SQL 相同)(甚至不会为此烦恼)
2- 为我希望不区分大小写的字段创建一个单独的属性。
所以现在我的选择是:
1- 在 DB 中创建一个额外的列以具有不区分大小写的字段(不在此生命周期内)
2- 为 XAP 创建一个自定义数据加载器插件,以便在加载数据的那一刻将字段存储在“ToLower”属性。(支持,但将作为最后的手段离开)
我绝对不会选择#1,我会将自定义数据加载器作为最后的结果。所以我的想法是...
class Person {
String firstName
String firstNameLower
public void setFirstName(String firstName) {
this.firstName = firstName
this.firstNameLower = firstName.toLowerCase(...);
}
}
这适用于 Hibernate 吗?由于 GigaSpace 数据加载器使用 Hibernate,而我的 pojo 几乎是一个实体类。我使用的是 Hibernate XML 映射而不是注释。“ToLower”字段将不会被映射。Hibernate 是在所有映射的字段上调用 setXXX() 还是在底层做了一些花哨的代码替换并且不调用 setXXX() 方法。
我还认为注释在这里会很好用,但不确定如何实现它们,或者即使在这种情况下可能。