gpt4 book ai didi

java - 从迭代列表中保存对象

转载 作者:行者123 更新时间:2023-11-29 05:36:01 25 4
gpt4 key购买 nike

我目前正在使用 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 行,所以我做了 for,我的输入是 input1、input2、input3 等。这些是我的对象 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 行(包含有效数据的最后一行)而不是所有行。

非常感谢任何帮助,这是我在大学项目中的期末考试。

最佳答案

您只有一个 DetallePedido 对象。您在各种循环中一遍又一遍地更改其字段值,但它仍然只是一个对象。最后你保存它。就一次。当然,您只会在数据库中插入一行。

您可以尝试的是,不要分别遍历 Mercaderia 对象、Cantidad 对象和 Precio 对象;有一个循环,在每次迭代中创建一个新的 DetallePedido 对象,设置 MercaderiaCantidadaPrecio,然后保存 DetallePedido

关于java - 从迭代列表中保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19505980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com