2012-07-11 94 views
0

我有一個數據庫和Java應用程序使用休眠功能來查詢數據庫。有一個名爲NCS_User的類,其參數正確映射到xml文件中的數據庫。我正在使用以下代碼從外部填充的數據庫中提取數據。使用select在哪裏查詢與休眠

package testhibernate; 

public class NCS_User { 

    private String PERSONIDNO; 
    private String FULLNAME; 
    private int ROLEID; 
    private String ROLENAME; 
    private int SCHEMEID; 
    private String SCHEMETITLE; 

    /** 
     * creates the system default users [only used by spring] 
     * 
     * @param PERSONIDNO 
     * @param FULLNAME 
     * @param ROLEID 
     * @param ROLENAME 
     * @param SCHEMEID 
     * @param SCHEMETITLE 
     */ 
    private NCS_User(final int ROLEID) { 
      this.ROLEID = ROLEID; 
    } 

    public String getFULLNAME() { 
      return FULLNAME; 
    } 

    public int getROLEID() { 
      return ROLEID; 
    } 

    public String getROLENAME() { 
      return ROLENAME; 
    } 

    public int getSCHEMEID() { 
      return SCHEMEID; 
    } 

    public String getSCHEMETITLE() { 
      return SCHEMETITLE; 
    } 

    public String getPERSONIDNO() { 
      return PERSONIDNO; 
    } 

    public void setFULLNAME(final String FULLNAME) { 
      this.FULLNAME = FULLNAME; 
    } 

    public void setROLEID(final int ROLEID) { 
      this.ROLEID = ROLEID; 
    } 

    public void setROLENAME(final String ROLENAME) { 
      this.ROLENAME = ROLENAME; 
    } 

    public void setSCHEMEID(final int SCHEMEID) { 
      this.SCHEMEID = SCHEMEID; 
    } 

    public void setSCHEMETITLE(final String SCHEMETITLE) { 
      this.SCHEMETITLE = SCHEMETITLE; 
    } 

    public void setPERSONIDNO(final String PERSONIDNO){ 
      this.PERSONIDNO = PERSONIDNO; 
    } 
} 



package testhibernate; 

import org.hibernate.Session; 
import org.hibernate.*; 
import org.hibernate.cfg.*; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

import java.util.*; 
/** 
* 
* @author Administrator 
*/ 
public class TestHibernate { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     System.out.println("Entering main loop"); 
     Session session = null; 
     int qroleId=0; 
     int qschemeId=0; 
     String trueLogin="S1234567D"; 
     try{ 
      System.out.println("Establishing connection"); 
      // This step will read hibernate.cfg.xml and prepare hibernate for use 
      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
      session =sessionFactory.openSession(); 
      String SQL_QUERY ="Select ncs_user.PERSONIDNO, ncs_user.ROLEID, ncs_user.SCHEMEID from NCS_User ncs_user where ncs_user.PERSONIDNO="+trueLogin; 
      Query query = session.createQuery(SQL_QUERY); 
      System.out.println("Query created"); 

      for(Iterator it=query.iterate();it.hasNext();){ 
       Object[] row = (Object[]) it.next(); 
       qroleId = new Integer(row[1].toString()); 
       System.out.println("Role Id: " + qroleId); 
       qschemeId = new Integer(row[2].toString()); 
       System.out.println("Scheme Id: " + qschemeId); 
      } 
     } 
     catch(Exception e){ 
      System.out.println(e.getMessage()); 
     } 
     finally{ 
     } 
    } 
} 

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 

    <session-factory> 

    <property name="dialect">org.hibernate.dialect.Oracle12cDialect</property> 
    <property name="connection.driver_class">oracle.jdbc.OracleDriver</property> 
    <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> 
    <property name="connection.username">system</property> 
    <property name="connection.password">******</property> 

    <property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> 

    <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
    <property name="current_session_context_class">thread</property> 
    <property name="hibernate.show_sql">true</property> 

    <!-- Mapping files --> 
    <mapping resource="NCS_User.hbm.xml"/> 
    </session-factory> 

</hibernate-configuration> 



<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
    <class name="TestHibernate.NCS_User" table="NCS_User"> 
    <id name="ROLEID" type="long" column="ROLEID" > 
    <generator class="assigned"/> 
    </id> 

    <property name="FULLNAME"> 
    <column name="FULLNAME" /> 
    </property> 
    <property name="PERSONIDNO"> 
    <column name="PERSONIDNO"/> 
    </property> 
    <property name="ROLENAME"> 
    <column name="ROLENAME"/> 
    </property> 
    <property name="SCHEMEID"> 
    <column name="SCHEMEID"/> 
    </property> 
    <property name="SCHEMETITLE"> 
    <column name="SCHEMETITLE"/> 
    </property> 
</class> 
</hibernate-mapping> 

但是,當我嘗試打印qroleID和qschemeId時,我沒有得到任何值。在命令提示符下,出現錯誤「無法從資源NCS_User.hbm.xml解析映射文檔」 這是在「建立連接」後打印出來的。 有人能幫我理解我在這裏做錯了什麼嗎?謝謝。

+0

是什麼行[0]? – 2012-07-11 05:27:48

+0

我認爲你應該使用SQLQuery而不是Query,因爲你正在觸發原生SQL查詢而不是Hibernate查詢。 – 2012-07-11 05:38:38

+0

查詢是否使用'iterate()'而不是使用'list()'?如果我沒有記錯,他們曾經有過一些問題。什麼是你使用的休眠版本? – 2012-07-11 06:18:47

回答

0

使用createSQLQuery insted的的createQuery

String SQL_QUERY = "Select ncs_user.PERSONIDNO as pId, ncs_user.ROLEID as rId, ncs_user.SCHEMEID as sId from NCS_User ncs_user where ncs_user.PERSONIDNO="+trueLogin"; 
SQLQuery query = session.createSQLQuery(SQL_QUERY); 

query.addScalar("pId", Hibernate.LONG) 
query.addScalar("rId", Hibernate.LONG) 
query.addScalar("sId", Hibernate.LONG) 
List<Object[]> result = query.list(); 
    for (Object[] objects : result) { 
      long pId = ((Integer) objects[0]).longValue(); 
     long rId = ((Integer) objects[1]).longValue(); 
      long sId = ((Integer) objects[2]).longValue(); 
     } 

的可能,這將幫助你。 我不確定這段代碼。

+0

我試過這個代碼,但仍然是相同的結果。我編輯了這個問題來包含我的整個代碼。 – user1439090 2012-07-12 02:02:37

1

程序包名稱(也作爲名稱屬性值的一部分)區分大小寫。

你之間的不匹配:

<class name="TestHibernate.NCS_User" table="NCS_User"> 

package testhibernate; 
... 
public class NCS_User