2

私はを返す関数を持っていますObject

このtoString()メソッドは、私のオブジェクトに2つのBigDecimal属性があることを示しています。しかし、コードでそれらを取得する方法がわかりませんか?

ここに画像の説明を入力してください

私の関数は休止状態を使用してクエリから結果を取得します:

public Object executeQuery(final String sql) {
    final Query query = getSessionFactory().getCurrentSession().createSQLQuery(sql);
    return query.list().get(0);
}

ありがとうございました。

-追加情報:

obj.getClass().getDeclaredFields(); // empty array []
obj.getClass().getName();           // [Ljava.lang.Object;
final BigDecimal b = (BigDecimal) obj[0]; //Compilation error: The type of the expression must be an array type but it resolved to Object
4

5 に答える 5

4

obj.getClass().getDeclaredFields()あなたを助けられる。一般的にリフレクションAPIを学びます。Beanに反対する場合は、JackartaBeanUtilsを使用することもできます。

于 2013-01-17T17:44:00.727 に答える
2

コメントから判断すると、オブジェクトはオブジェクト配列です。

したがって、最初に結果をオブジェクト配列にキャストする必要があります。

Object[] obj = (Object[]) query.list().get(0);

次に、次のように最初のBigDecimalにアクセスできるはずです。

BigDecimal b = (BigDecimal) obj[0];

おそらく、いくつかの例外処理を追加する必要があります。

于 2013-01-17T17:57:01.810 に答える
1

アップデート:

2列の結果セットがあります。

Object[] result= query.list().get(0);
BigDecimal number1 = (BigDecimal) result[0];
BigDecimal number2 = (BigDecimal) result[1];
于 2013-01-17T17:49:04.657 に答える
1

最初にそのオブジェクトのクラス名を取得する

System.out.println(obj.getClass());

SQLクエリを実行しているため、結果はEntityまたはになりObject[]ます。

クエリから取得したオブジェクトが次のようにObject[]反復できることを知ったとき

if( obj instanceof Object[] ) {
       Object[] objA = (Object[])obj;
       for(Object atomicObj : objA ) {
         System.out.println(atomicObj);
       }
}

これは、オブジェクト配列に存在するすべての要素に対して機能します。今回はBigDecimalを取得する可能性があり、次のクエリはとを返す可能性がStringありBigDecimalます。

于 2013-01-17T17:52:12.653 に答える
1

これはオブジェクトではなく、オブジェクトの配列です。

BigDecimal firstColumn = (BigDecimal) ((Object[])query.list().get(0))[0];
BigDecimal secondColumn = (BigDecimal) ((Object[])query.list().get(0))[1];

それで全部です。

于 2013-01-17T17:58:13.107 に答える