Отдельная сущность для первичных ключей - PullRequest
1 голос
/ 25 сентября 2011

У меня есть две таблицы, как показано ниже. enter image description here

«User Acc» - это данные профиля пользователя, а данные для входа в систему (пароль пользователя) находятся в отдельной таблице, называемой login. Когда я генерировал сущности в IDE Netbeans, для таблицы входа в систему (базы данных) было 2 таблицы. Один сгенерированный объект - «Login», другой - «LoginId». Сущность Login имеет ссылку на LoginId и UserAcc. У объекта LoginId есть имя пользователя и пароль, которые были в таблице базы данных входа в систему. UserAcc имеет первичный ключ, который является INT для каждого пользователя. Этот ключ является внешним ключом таблицы входа в систему.

Теперь я хочу проверить user @ loging. Как я это делаю, я создаю экземпляр LoginId и устанавливаю имя пользователя и пароль, а затем проверяю любой объект с таким же LoginId. Вот код.
uName и pw являются строками и взяты из пользовательского ввода.

  LoginId id=new LoginId(uName, pw);

 Session ses = NewHibernateUtil.getSessionFactory().openSession();            
 Criteria crit = ses.createCriteria(Login.class);
 crit.add(Restrictions.eq("id", id));
 Entities.Login log = (Entities.Login)crit.uniqueResult();

Но даже если существующие имена пользователей и пароли совпадают с заданными именем пользователя и паролем, log всегда равен нулю.

Кто-нибудь скажет мне, где я должен проверить и в чем проблема. Спасибо. И другая моя проблема заключается в том, почему для двух столбцов (первичных ключей) в одной таблице базы данных и для другого объекта этой таблицы базы данных создается отдельный объект («LoginId»).

для входа в систему;

<hibernate-mapping>
<class name="Entities.Login" table="login" catalog="pcw">
    <composite-id name="id" class="Entities.LoginId">
        <key-property name="uname" type="string">
            <column name="uname" length="10" />
        </key-property>
        <key-property name="pw" type="string">
            <column name="pw" length="10" />
        </key-property>
    </composite-id>
    <many-to-one name="useracc" class="Entities.Useracc" fetch="select">
        <column name="UserAcc_uid" not-null="true" />
    </many-to-one>
</class>

для UserAcc:

<hibernate-mapping>
<class name="Entities.Useracc" table="useracc" catalog="pcw">
    <id name="uid" type="java.lang.Integer">
        <column name="uid" />
        <generator class="identity" />
    </id>
    <property name="fname" type="string">
        <column name="fname" length="45" />
    </property>
    <property name="sname" type="string">
        <column name="sname" length="45" />
    </property>
    <property name="RDate" type="date">
        <column name="r_date" length="10" />
    </property>
    <property name="street" type="string">
        <column name="street" length="45" />
    </property>
    <property name="city" type="string">
        <column name="city" length="45" />
    </property>
    <property name="email" type="string">
        <column name="email" length="45" />
    </property>
    <property name="tel" type="string">
        <column name="tel" length="45" />
    </property>
    <set name="comments" inverse="true" cascade="all">
        <key>
            <column name="UserAcc_uid" not-null="true" />
        </key>
        <one-to-many class="Entities.Comment" />
    </set>
    <set name="logins" inverse="true" cascade="all">
        <key>
            <column name="UserAcc_uid" not-null="true" />
        </key>
        <one-to-many class="Entities.Login" />
    </set>
</class>

1 Ответ

3 голосов
/ 25 сентября 2011

В любом случае, вы можете использовать HQL для ее решения, это будет выглядеть примерно так:

public boolean authenticate(Sting username,String pass){
Session ses = NewHibernateUtil.getSessionFactory().openSession();            
String sql = "from Login login where login.username:= username and login.pass = :=pass";
Query query = session.createQuery(sql);
query.setString("username",username);
query.setString("pass",pass);
List<Login> result = query.list();
 //close session, transaction,etc....
if (result ==null)
  return false;
else
  return true;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...