Hibernate Transaction:仅将列表的最后一项保存到表中

时间:2016-08-24 08:43:06

标签: java hibernate ejb

我有一个需要保存到数据库表中的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)被保存到表中。

2 个答案:

答案 0 :(得分:1)

你试过这个吗?

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();
}
}

答案 1 :(得分:0)

你需要在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();
}

我是伯爵。