私は現在、java+hibernate+oracle を使用して販売モジュールに取り組んでいます... 次のように jsp で注文フォームを作成しました。
これを行うパラメーターを取得しています:
ArrayList<String> idMercaderias = new ArrayList<String>();
ArrayList<String> cantidades = new ArrayList<String>();
ArrayList<String> precios = new ArrayList<String>();
for (int k = 0; k < 10; k++) {
idMercaderias.add(request.getParameter("idMercaderia" + k));
cantidades.add(request.getParameter("cantidad" + k));
precios.add(request.getParameter("precio" + k));
}
注文の詳細に 10 行あるので、入力が input1、input2、input3 などの for を作成しました。これらはオブジェクト Mercaderia の属性なので、リストにあるため、設定する必要があります。
最初に、記事が繰り返されないように最初のリストをフィルタリングしています。
Iterator itra = idMercaderias.listIterator();
ArrayList<String> sortedListIdMercaderias = new ArrayList<String>();
Object m;
while (itra.hasNext()) {
m = itra.next();
if (!sortedListIdMercaderias.contains(m)) {
sortedListIdMercaderias.add((String) m);
}
}
ここで、すべての属性を設定するオブジェクトを作成します。
DetallePedido detalle = new DetallePedido();
今、私はサイクルを 10 回実行しており (フォーム内のすべての行を考慮して)、各リストの反復を開始して、null または空のエントリを回避するオブジェクト属性を取得しています。
for (int x = 0; x < sortedListIdMercaderias.size(); x++) {
Iterator itr = idMercaderias.listIterator();
while (itr.hasNext()) {
String mercaderia = (String) itr.next();
if ((mercaderia != null) && (!mercaderia.equals(""))) {
Mercaderia mercaderiaSeleccionada = new MercaderiaDAO().findById(Integer.parseInt(mercaderia));
detalle.setMercaderia(mercaderiaSeleccionada);
}
}
Iterator itr2 = cantidades.listIterator();
while (itr2.hasNext()) {
String cantidad = (String) itr2.next();
if ((cantidad != null) && (!cantidad.equals(""))) {
int cantidadMercaderiaSeleccionada = Integer.parseInt(cantidad);
detalle.setCantidad(cantidadMercaderiaSeleccionada);
}
}
Iterator itr3 = precios.listIterator();
while (itr3.hasNext()) {
String precio = (String) itr3.next();
if ((precio != null) && (!precio.equals(""))) {
BigDecimal precioMercaderiaSeleccionada = new BigDecimal(precio);
detalle.setPrecioUnitario(precioMercaderiaSeleccionada);
}
}
最後に、データベースに永続化します:
Session session = new DetallePedidoDAO().getSession();
Transaction tx = session.beginTransaction();
try {
session.saveOrUpdate(detalle);
tx.commit();
session.close();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
データベースで、すべての行ではなく、1 行 (有効なデータを持つ最後の行) のみが挿入される理由がわかりません。
これは、大学のプロジェクトでの最終テストのためのものです。