2011-09-25 2 views
1

У меня есть две таблицы, как показано ниже. enter image description hereОтдельная сущность для первичных ключей

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

Теперь я хочу проверить пользователя @ 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(); 

Но Eventhough есть существующие имена пользователей и пароли, соответствующие с заданным именем и паролем, то 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> 

+0

Вы можете пожалуйста, разместите сопоставление между этими двумя классами? –

+0

да, конечно. Спасибо за внимание. –

+0

Мой главный вопрос: в одной из моих таблиц есть 2 первичных ключа. когда классы объектов генерируются объектом Netbeans, IDE ONE SEPERate создается, включая 2 первичных ключа. Затем объект, представляющий таблицу, ссылается на эту отдельную сущность, а другие feilds представляют столбцы таблицы. Я нахожу, почему существует отдельный класс сущностей? –

ответ

3

В любом случае вы можете использовать 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; 
} 
+0

Спасибо. Я хочу знать, почему существует отдельный объект для первичных ключей? –

+0

Я не совсем понимаю, что вы подразумеваете под «отдельным объектом для первичного ключа», но правило состоит в том, что каждая таблица и класс должны иметь первичный ключ и идентификатор, поэтому на каждой таблице всегда будет первичный ключ. –

+0

да .. но у одной из моих таблиц есть 2 первичных ключа. когда классы объектов генерируются объектом Netbeans, IDE ONE SEPERate создается, включая 2 первичных ключа. Затем объект, представляющий таблицу, ссылается на эту отдельную сущность, а другие feilds представляют столбцы таблицы. Я нахожу, почему существует отдельный класс сущностей? –

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