0

私はJavaで次のコードを持っています:

    try {
        SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
        session=sessionFactory.openSession();
        Query userQuery=session.createQuery("select u.userId, u.username,p.profileContent from User as u inner join u.profiles as p");//, p.profileContent 

        List userList=userQuery.list();
        for(int i=0;i<userList.size();i++){
            System.out.println(userList.get(i));
        }
    }
    catch(Exception e){
        System.out.println(e.getMessage());
    }
    finally{
        session.flush();
        session.close();
    }

クエリの結果を表示しようとしていますが、オブジェクトのみが表示されます。オブジェクトの内容を表示する方法を教えてください。現在、次のような結果が得られています。

[Ljava.lang.Object; @ 64bef361

4

4 に答える 4

4
for (Object o : userList) {
    Object[] row = (Object[]) o;
    System.out.println(Arrays.toString(row));
}

ただし、このようなループでコードを乱雑にするのではなく、デバッガーを使用する必要があります。

于 2012-05-18T15:31:50.877 に答える
0

オブジェクト参照を出力しようとすると、toString()メソッドが呼び出されます。ここで、userListのタイプがUserであるとします。UserクラスのtoString()メソッドをオーバーライドしていません。したがって、現在行われているのは、オブジェクトクラスのtoString()メソッドが呼び出されることです。Objectクラスは、完全修飾パッケージ名とハッシュコードを出力するようにこのメソッドを実装しています。

したがって、UserクラスでこのtoString()メソッドをオーバーライドするだけで、このメソッドで構成したとおりにデータ全体の印刷が開始されます。このメソッドを手動でオーバーライドできます。IDE行のNetBeansまたはEclipseがある場合は、Javaファイルの任意の場所を右クリックして[ToStringメソッドの生成]を選択します。

于 2012-05-18T20:02:01.970 に答える
0

Object.toString()Javaでは、この問題を回避するために、プログラミングをオーバーライドすることをお勧めします。取得しているものよりも意味のある出力が必要な場合は、APIによって推奨されている標準に準拠してください。疑問がある場合は、ドキュメントを参照してください

于 2012-05-19T11:11:26.463 に答える
0

私は問題を理解しました。複数のテーブルを結合するクエリの結果がObjectsクラスの配列として結果を格納することを知りませんでした。

Query userQuery=session.createQuery("select u.userId, u.username,p.profileContent from User as u inner join u.profiles as p");//, p.profileContent 

Iterator ite = userQuery.list().iterator();
while ( ite.hasNext() ) {    
    Object[] pair = (Object[]) ite.next();
    Integer user = (Integer) pair[0];
    String userName=(String) pair[1];
    String profileContent=(String) pair[2];

    System.out.println(user+" "+userName+" "+profileContent);
}
于 2012-05-22T21:02:57.757 に答える