2011-09-25 4 views
1

J'ai deux tables comme ci-dessous. "User Acc" est le profil de l'utilisateur et les informations de connexion de l'utilisateur (mot de passe utilisateur) sont dans une table séparée appelée login.When j'ai généré les entités dans Netbeans IDE, il y avait 2 tables pour la table de connexion (base de données). Une entité générée est "Login", une autre est "LoginId". L'entité Login a une référence à l'entité LoginId et UserAcc. L'entité LoginId a un nom d'utilisateur et un mot de passe qui étaient dans la table de base de données de connexion.UserAcc a une clé primaire qui est INT pour chaque utilisateur. Cette clé est la clé étrangère de la table de connexion.Entité séparée pour les clés primaires

Maintenant, je veux vérifier la connexion utilisateur @. Comment je le fais, je crée une instance de LoginId et définissez le nom d'utilisateur et le mot de passe, puis vérifier tout objet qui a même LoginId. Voici le code.
uName et pw sont des chaînes et proviennent de l'entrée utilisateur.

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(); 

Mais eventhough il y a les noms d'utilisateur et mots de passe existants correspondant à nom d'utilisateur et mot de passe donné, le log est toujours nulle. Quelqu'un me dit où je devrais vérifier et quel est le problème. Je vous remercie. Et mon autre problème est pourquoi une entité distincte ("LoginId") est créée pour deux colonnes (clés primaires) dans une table de base de données et une autre entité pour que sa table de base de données.

pour la connexion;

<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> 

pour 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

Pouvez-vous s'il vous plaît poster la cartographie entre ces 2 classes? –

+0

oui bien sûr. Merci pour votre attention –

+0

Ma question principale est :: une de ma table a 2 clés primaires. lorsque les classes d'entités sont générées par l'entité Netbeans IDE ONE SEPERate est créée, y compris les 2 clés primaires. Alors l'entité représente la table a une référence à cette entité séparée et d'autres représentent les colonnes du tableau. Je trouve pourquoi il y a une classe d'entité séparée? –

Répondre

3

vous pouvez tout cas utiliser HQL pour le résoudre, il regardera plus et moins comme ceci:

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

Merci. Je veux savoir pourquoi il y a une entité séparée pour les clés primaires? –

+0

Je ne comprends pas exactement ce que vous entendez par "entité distincte pour la clé primaire", mais la règle est que chaque table et classe doit avoir une clé primaire et un ID, donc il y aura toujours une clé primaire pour chaque table. –

+0

oui .. mais un de ma table a 2 clés primaires. lorsque les classes d'entités sont générées par l'entité Netbeans IDE ONE SEPERate est créée, y compris les 2 clés primaires. Alors l'entité représente la table a une référence à cette entité séparée et d'autres représentent les colonnes du tableau. Je trouve pourquoi il y a une classe d'entité séparée? –

Questions connexes