2

私はStudentInfoテーブルを持っています。テーブルの名前列の下にあるすべての名前を取得する必要があります。

以下の関数で私を修正するのを手伝ってくれる人はいますか

 @Override
 public List<StudentRecord> getAllStudentNames(){

        Session session = HibernateUtil.getSessionFactory().openSession();

     try {

        List<StudentRecord> smrList = new ArrayList<StudentRecord>();

            String SQL_QUERY = "select smr.studentName from StudentRecord as smr";
        Query query = session.createQuery(SQL_QUERY)  

         smrList  = query.list();



        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            session.flush();
            session.close();
            HibernateUtil.getSessionFactory().close();
        }


        return smrList  
    }
4

2 に答える 2

4

名前が必要で、名前は文字列であるため、List<StudentRecord>ではなくList<String>.

このquery.list()メソッドは List を返すため、新しい ArrayList を作成する必要はなく、メソッドによって返されるリストに置き換えるだけです。

したがって、次のものが必要です (Java の命名規則を尊重します)。

String hql = "select smr.studentName from StudentRecord as smr";
Query query = session.createQuery(hql);  
List<String> result = query.list();
return result;

HQL と SQL は同じ言語ではなく、ここでは HQL を使用しているため、変数hqlに ではなくという名前を付けたことに注意してください。sql上記のクエリは、StudentRecordクラスの永続プロパティが という名前の場合に機能しますstudentName。HQL はテーブルではなくエンティティをクエリに使用するため、テーブルの名前と列の名前は関係ありません。

最後に、例外をキャッチしないでください。エラーが隠されるだけです。例外を呼び出し元に伝播させます。

基本的な Java の知識が不足しているようです。複雑なフレームワークである Hibernate を使用する前に、単純な問題から Java を学ぶことから始めます。

于 2012-07-30T11:45:35.967 に答える
2

あなたのクエリは正しいです。使用してselect query and select query always return list of object array if more than one column is define in the query or list of a selected column type いるので、コードで以下を実行するだけで問題なく動作します。

List<Object[]> objList = query.list();    
return objList ;

これで、すべての名前を取得し、反復objListして smrList に設定します

また

List<String> nameList = query.list();
return nameList;
于 2012-07-30T11:50:19.557 に答える