0

入力タイプがあり、その値はflowScopeに設定されています。

<input name="myItem" required="false" value="flowScope.myItem"/>

MyOtherItem のリストを作成し、次のようにコントローラー メソッドに送信しています。

<evaluate expression="myController.save(myOtherItemDataModel.selectedRows,myItem)" result="flowScope.myItem"/>

MyController 内には、myOtherItemList からデータを取得して myItem の複数のインスタンスを保存するメソッド save があります。

public MyItem save(MyOtherItem[] myOtherItem,MyItem myItem){
    for(int i=0; i<myOtherItem.length; i++){
        myItem.setData(myOtherItem[i].getData());
        saveMyItem(myItem);
    }
    return myItem;
}

saveMyItem メソッド内で MyItem オブジェクトを永続化しています

public void saveMyItem(MyItem myItem) {
    entityManager.persist(myItem);
}

ここで、entityManager は javax.persistence.EntityManager クラスのインスタンスです。

私の問題は、save メソッドのループが複数回実行されている間に、データベースに保存されたエントリが 1 つしかないことです。その理由は、MyItem の新しいインスタンスを作成するのではなく、古いインスタンスのデータをオーバーライドするだけだからです。この問題を解決する方法を知っている人はいますか?

4

1 に答える 1

0

MyItemをコントローラーメソッドに渡す必要がある理由がわかりません。返そうとしているmyItemがわからないので、それらをたくさん保存したいようです...

多分あなたは代わりにそのようなものを使うべきです:

public List<MyItem> save(MyOtherItem[] myOtherItem){
   List<MyItem> result = new ArrayList<MyItem>(); 
   for(int i=0; i<myOtherItem.length; i++){
        MyItem myItem = new MyItem();
        myItem.setData(myOtherItem[i].getData());
        saveMyItem(myItem);
        result.add(myItem);
    }
    return myItem;
}
于 2013-02-05T19:50:07.600 に答える