2016-08-24 8 views
1

データベーステーブルに保存する必要があるDTOクラスのリストがあります。私が追跡することができない何らかの未知の理由により、最後のアイテムのみがデータベースに保存されています。Hibernate Transaction:リストの最後の項目のみがテーブルに保存されます

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)のみがテーブルに保存されます。

答えて

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

ここで、iはカウントです。

+0

この最初の部分は、説明したものと同じです。Save = session.Save()、merge = entityManager.merge(); は2番目の部分を試します – Bibhaw

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(); 
} 
} 
関連する問題