我有一个需要保存到数据库表中的DTO类列表。由于某种未知的原因,只有最后一项被保存到数据库中,我无法跟踪。
查找下面的示例服务和管理器类,
class TestService {
public void saveData(List<OrderDTO> dtolist) {
//exception handling properly
transaction.begin();
manager.saveAlldata(dtolist);
transaction.commit();
}
}
Class TestManager {
public void saveAlldata(List<OrderDTO> dtolist) {
//exception handles properly
for(OrderDTO dto: dtolist){
OrderPersist persist = new OrderPersistent();
persist.setId(dto.getId());
persist.setItem(dto.getItem());
//save(persist) or merge(persist);
}
}
假设我有2个项目的详细信息,例如id=1, item =S_001和id= 2, item =S_002在dto列表中,那么只有最后一个项目(2,S_002)被保存到表中。
你试过吗?
public void saveAlldata(List<OrderDTO> dtolist) {
//exception handles properly
for(OrderDTO dto: dtolist){
transaction.begin();
OrderPersist persist = new OrderPersistent();
persist.setId(dto.getId());
persist.setItem(dto.getItem());
//save(persist) or merge(persist);
transaction.commit();
}
}
您需要在for循环中使用session.save
for(OrderDTO dto: dtolist){
OrderPersist persist = new OrderPersistent();
persist.setId(dto.getId());
persist.setItem(dto.getItem());
session.save(persist);
}
也考虑保存保存的计数,可以使用计数器。如下所示:
if( i % 50 == 0 ) {
session.flush();
session.clear();
}
其中I为计数