нечувствительные к регистру критерии гибернации для составного ключа

У меня есть объект гибернации с составным ключом, как в примере ниже.

class A{
B id; //this is the composite key for this class
int property1;
int property2;
int property3;
//getters and setters
}

class B{

String prop1;
String prop2;
String prop3;
}

В приведенном выше примере объект A имеет B в качестве составного ключа. Теперь я написал приведенные ниже критерии, чтобы получить объект A, передав составной ключ критерию. Пример кода ниже.

B id=new B("Prop1Val","Prop2Val","Prop3Val");
(A) sessionFactory.getCurrentSession().get(A.class,id)

Мои вопросы:

  1. Я предполагаю, что приведенный выше код делает поиск с учетом регистра. Если я прав, как я могу сделать поиск без учета регистра?
  2. Правильно ли создать критерии, как показано ниже, для решения проблемы?

    Criteria criteria = sessionFactory.getCurrentSession().createCriteria(A.class);
    criteria.add(Restrictions.eq("id.prop1",id.getProp1()).ignoreCase());
    criteria.add(Restrictions.eq("id.prop2",id.getProp2()).ignoreCase());
    criteria.add(Restrictions.eq("id.prop3",id.getProp3()).ignoreCase());
    
  3. Есть ли простой способ настроить файл hbm для использования по умолчанию без учета регистра?


person DonX    schedule 28.02.2012    source источник
comment
См.: stackoverflow.com/questions/8636038/   -  person user1016403    schedule 28.02.2012


Ответы (1)


Ваши критерии выглядят нормально, но ваш запрос на получение по умолчанию без учета регистра не имеет особого смысла. Что бы он сделал, если бы несколько строк в базе данных имели PK, отличающиеся только регистром?

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

Вы можете сделать то же самое, используя проверенные ограничения в базе данных, на случай, если какое-то другое приложение вставит данные в базу данных.

person JB Nizet    schedule 28.02.2012