2013-11-19 6 views
1

User.hbm.xmlHibernate пример запроса неправильно сформирован

<class name="dataAccess.User" table="USER" schema="PUBLIC" catalog="XYZ"> 
    <id name="userId" type="long"> 
     <column name="USER_ID" precision="10" scale="0" /> 
     <generator class="assigned" /> 
    </id> 
    <property name="userName" type="string"> 
     <column name="USER_NAME" length="25" not-null="true" unique="true" /> 
    </property> 
    <property name="emailId" type="string"> 
     <column name="EMAIL_ID" length="50" not-null="true" /> 
    </property> 
    <property name="password" type="string"> 
     <column name="PASSWORD" length="50" not-null="true" /> 
    </property> 
    <property name="admin" type="char"> 
     <column name="ADMIN" length="1" not-null="true" /> 
    </property> 
    <property name="lastLoginTime" type="timestamp"> 
     <column name="LAST_LOGIN_TIME" length="23" /> 
    </property> 

Моя функция доступа к данным

public List findByExample(User instance) { 
    log.debug("finding User instance by example"); 
    try { 
     List results = sessionFactory.openSession() 
       .createCriteria("dataAccess.User") 
       .add(Example.create(instance)).list(); 
     System.out.println(results.size()); 
     log.debug("find by example successful, result size: " 
       + results.size()); 
     return results; 
    } catch (RuntimeException re) { 
     log.error("find by example failed", re); 
     throw re; 
    } 
} 

я лишь вскользь два из 6 атрибутов класса пользователя (имя пользователя и пароль) , Но в запросе он также проверяет поле admin. Он отлично работает, если я поставлю исключение («admin») к критериям. Я не могу понять, почему это происходит.

+0

Является ли что-то в пользовательском классе или меняет поле администратора? Например, когда получатель получает значение по умолчанию? –

+0

@ StormcrowSX Нет, его нет. Я получаю пароль пользователя из формы, заполняя его в объекте User и передавая его методу. Я попытался распечатать значения каждого атрибута в объекте. Только имя пользователя и пароль имеют значения, остальные - все. – Adarsh

ответ

2

Я нашел проблему.

Значение по умолчанию для char - '\ u0000'. Критерий create исключает поле, только если значение найдено равным нулю. Если я изменю его на String, он отлично работает.

+1

Изменение его к объекту Символ вместо примитивного символа, вероятно, сработал бы. Вообще его легче избежать примитивов вообще в Hibernate. –

0

Учитывая сопоставление поля admin, мы можем предположить, что он имеет тип boolean. Логическое значение имеет либо значение false, но никогда не null. Почему значение этого поля не будет частью примера? Hibernate не может предположить, что false означает «я хочу игнорировать это поле», и это означает, что «я хочу найти пользователей, чей флаг администратора прав». Вы можете очень хорошо искать пользователей, чей флаг администратора является ложным.

+0

Я определил поле admin как символ, а не boolean. – Adarsh

+0

Покажите нам исходный код. –

Смежные вопросы