2011-09-25 149 views
1

我有兩個表如下。 enter image description here主鍵的獨立實體

「User Acc」是用戶的配置文件詳細信息,用戶的登錄詳細信息(用戶名密碼)位於一個名爲login的獨立表中。當我在Netbeans IDE中生成實體時,登錄(數據庫)表有2個表。一個生成的實體是「登錄」,另一個是「LoginId」。登錄實體具有對LoginId和UserAcc實體的引用。 LoginId實體具有登錄數據庫表中的用戶名和密碼.UserAcc的主鍵是每個用戶的INT,該鍵是登錄表的外鍵。

現在我想檢查用戶@登錄。我的做法是創建一個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個主鍵。然後,實體表示該表具有對該單獨實體的引用,而其他實體表示該表的列。我在尋找爲什麼有一個單獨的實體類? –

回答

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

我不明白「主鍵獨立實體」是什麼意思,但是規則是每個表和類都應該有主鍵和ID,所以每個表總是會有主鍵。 –

+0

是的..但我的表中有一個有2個主鍵。當實體類由Netbeans IDE生成時,ONE SEPERate實體被創建,包括2個主鍵。然後,實體表示該表具有對該單獨實體的引用,而其他實體表示該表的列。我在尋找爲什麼有一個單獨的實體類? –