因此,我使用的是带有Hibernate插件的GigAspace XAP将DB表加载到其网格缓存中,不幸的是查询网格,它们不支持直接的情况不敏感的搜索。

他们提供了2种解决方案:
1-像查询一样使用(与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 Dataloader使用Hibernate,而且我的POJO几乎是实体类。我正在使用Hibernate XML映射而不是注释。 “ Tolower”字段将不会被映射。在所有映射的字段上或在引擎盖下进行一些精美的代码替换,并且不调用SetXxx()方法,hibernate call call setxxx()是在映射的所有字段上。

我还认为在这里有很好的用途,但不确定如何实施它们,即使在这种情况下也可以实施它们。

有帮助吗?

解决方案 2

对于有兴趣的人。

只需创建字段的“ tolower()”方法,然后对此添加索引注释,您可以将POJO映射到通常的方式。

其他提示

Hibernate确实使用代理对象,但是数据仍然存储在您的对象中,Hibernate将使用您提供的Getter/Setter实现,因此,如果您想设置LowerCase版本,您的解决方案应该可以工作,尽管我不清楚为什么您为什么需要需要一个单独的实例变量来存储小写版本。

本文 讨论代理的基础知识。

如果您配置Hibernate以使用字段访问者方法(而不是直接访问字段),则其默认行为是使用所有SETXXX()方法。

我认为,在您的情况下,最好的解决方案是(如果仅用于GIGASPACE HIBERNATE)来自定义Hibernate加载数据的方式,通过使用Standrd StringType定义自定义类型来加载数据,然后将其转换为Lower Case ...

同时,如果您的系统需要较低的案例数据,您是否确保在数据库中输入的所有字符串都是较低的情况吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top