0

問題のコンテキストでは、Stock にマップされた 2 つの行を持つ Category テーブル。しかし、以下のロジックを適用すると、結果として 1 つの行エントリしか得られません。

それを解決するには、オブジェクトのプロパティを同じクラスの新しく作成されたオブジェクトにコピーする方法を知りたいですか? そのため、新しく作成されたオブジェクトには古いオブジェクトのデータが含まれます。

public class App {
    public static void main(String[] args) {
        System.out.println("Hibernate many to many (XML Mapping)");
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();

        try {
            List<Stock> stocksNew=new ArrayList<Stock>();
            List<Stock> stocks = session.createQuery("FROM Stock").list(); 

            for (Stock stock:stocks) {
                Set<Category> categories = stock.getCategories();

                if (categories.isEmpty())
                {
                    System.out.println("true");
                    stocksNew.add(stock);
                } 
                else
                {   
                    for (Iterator<Category> iterator2 = 
                        categories.iterator(); iterator2.hasNext();) {
                        Category category = (Category) iterator2.next();
                        stock.
                        stock.setCategoryId(category.getCategoryId());
                        stock.setName(category.getName());
                        stocksNew.add(stock);

                    }
                }   
            }

            for (Stock stock : stocksNew) {
                System.out.println("Stock ID: " + stock.getStockId()); 
                System.out.println("Stock Name: " + stock.getStockName()); 
                System.out.println("Stock  Code: " + stock.getStockCode()); 
                System.out.println("Category Id:"+stock.getCategoryId());
                System.out.println("Category Name:"+stock.getName());
            }


        } catch (HibernateException e) {
            e.printStackTrace(); 
        } finally {
            session.close(); 
        }
    }

}

出力

Stock ID: 1
Stock Name: PADINI
Stock  Code: 7052
Category Id:2
Category Name:INVESTMENT
Stock ID: 1
Stock Name: PADINI
Stock  Code: 7052
Category Id:2
Category Name:INVESTMENT

上記の出力を取得していますが、私の要件では、出力は次のようになるはずです

Stock ID: 1
Stock Name: PADINI
Stock  Code: 7052
Category Id:1
Category Name:CONSUMER
Stock ID: 1
Stock Name: PADINI
Stock  Code: 7052
Category Id:2
Category Name:INVESTMENT
4

3 に答える 3

0

あるオブジェクトのプロパティを別のオブジェクトにコピーするだけの場合は、java.lang パッケージで利用可能な Java の object.clone メソッドを使用できます...すべてのプロパティを新しくインスタンス化されたものにコピーします...

于 2013-10-19T17:32:17.157 に答える
0

ロジック コードでは、Stocks から Categories を取得しようとしていることがわかります。

Set<Category> categories = stock.getCategories();

その後、カテゴリも株式に設定します。

stock.setCategoryId(category.getCategoryId());

==> アプリケーションを再設計したほうがよいでしょう。


これについてあなたの質問:

それを解決するには、オブジェクトのプロパティを同じクラスの新しく作成されたオブジェクトにコピーする方法を知りたいですか? そのため、新しく作成されたオブジェクトには古いオブジェクトのデータが含まれます。

Java lang Object にはメソッド java.lang.Object.clone() があり、これが役立つ場合があります。

于 2013-10-19T17:34:12.560 に答える