Как создать нечувствительное место на Java Pojo. Ищу хороший дизайн.

StackOverflow https://stackoverflow.com/questions/4512758

Вопрос

Поэтому я использую Gigaspaces XAP с плагином Hibernate для загрузки моей таблицы DB в кэш их сетки, к сожалению, для запроса сетки, которую они не поддерживают непосредственно нечувствительные поиски.

Они предложили 2 решения:
1- Используйте как запрос (такой же, как SQL), который медленно (даже не беспокоится об этом)
2- Создайте отдельное свойство полей, которые я хочу иметь нечувствительный.

Итак, теперь мой выбор:
1- Создайте дополнительный столбец в БД, чтобы иметь нечувствительное к случаю поля (не в этот срок службы)
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 -картирование, а не аннотации. Поля «толаулера» не будут нанесены на карту. Вызывает ли Hibernate Call SetXXX () во всех полях, которые отображаются или выполняет какую -то причудливую замену кода под капотом и не называют методы setXXX ().

Я также думаю, что аннотация была бы здесь хорошим, но не уверен, как их реализовать или даже если это возможно для этого случая.

Это было полезно?

Решение 2

Для всех заинтересованных.

Просто создайте метод «tolower ()» поля и добавьте аннотацию индекса на это, и вы можете сопоставить свой Pojo, чтобы спятить обычным способом.

Другие советы

Hibernate действительно использует прокси -объекты, но данные все еще хранятся в вашем объекте, а Hibernate будет использовать реализации Getter/Setter, которые вы предоставляете, поэтому ваше решение должно работать, если вы хотите установить версию строчных Отдельная переменная экземпляра для хранения строчной версии.

эта статья Проходит основы прокси.

Если вы настраиваете Hibernate для использования метода Accessords Fields (и не обращается к непосредственному доступу к полям), его поведение по умолчанию состоит в том, чтобы использовать все метод setxxx ().

Я думаю, что в вашем случае лучшим решением было бы (если Hibernate используется только для Gigaspace) для настройки того, как Hibernate загружает данные, путем определения пользовательского типа, используя Standrd Stringtype для загрузки данных, затем преобразование в нижний случай ...

Между тем, если вашей системе требуются данные о более низких случаях, не можете ли вы убедиться, что все строки, введенные в базу данных, являются более низким?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top