0

Hibernate 機能を使用してデータベースにクエリを実行するデータベースと Java アプリケーションがあります。パラメータがxmlファイルのデータベースに正しくマップされたNCS_Userというクラスがあります。次のコードを使用して、外部から入力されたデータベースからデータを抽出しています。

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 からマッピング ドキュメントを解析できませんでした」というエラーが表示されます。これは、「接続を確立しています」が出力された後です。誰かが私がここで間違っていることを理解するのを手伝ってくれませんか? ありがとうございました。

4

2 に答える 2

1

パッケージ名 (name 属性値の一部としても) は、大文字と小文字が区別されます。

以下の間に不一致があります:

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

package testhibernate;
...
public class NCS_User
于 2012-07-16T18:37:01.470 に答える
0

createQuery の代わりに createSQLQuery を使用する

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

これはあなたを助けるかもしれません。そして、私はこのコードについて確信が持てません。

于 2012-07-11T10:42:07.387 に答える