2017-09-19 25 views
0

forループ内のエンティティを保存しようとしています。ただし、データベース内の最後のエンティティのみを保存します。私の主体は以下のように見えます。forループJPA内のエンティティを永続化する方法は?

@Entity 
@Table(name = "users_departments") 
public class Users_Departments extends AbstractBaseEntity { 
...... 
} 

私はデータベースにエンティティを保存するための一般的な方法を書いています。

@Override 
@Transactional 
public T create(T entity) { 
    entityManager.persist(entity); 
    entityManager.flush(); 
    entityManager.refresh(entity); 
    return entity; 
} 

サービス方法では、以下のように部門やその他の詳細を持つユーザーのリストを保存しています。

@Transactional 
    public List<Users_Departments> addUserstoDepartments(Long deptId,List<Long> useridList){ 
     Users_Departments object = new Users_Departments() ; 
     List <Users_Departments> userDeptList = new ArrayList<>(); 
      for(int a=0 ; a < useridList.size();a++){     
      object.setDepartment(departmentDao.find(deptId)); 
      object.setStation(userDao.find(useridList.get(a))); 
      object.setCreatedDate(new Date()); 
      object.setUpdatedDate(new Date()); 

      Users_Departments newlyCreated = users_departmentsDao.create(object); 
      userDeptList.add(newlyCreated); 
     } 
     return userDeptList; 
    } 

このメソッドをデバッグすると、更新された値を持つリストが返されますが、すべてのアイテムはすべて「id」と同じ値になります。したがって、最後のレコードのみがデータベースで使用可能です。私は他のすべてのレコードが置き換えられたと思います。それには何らかの理由がありますか? forループ内にエンティティを作成できませんか?どのように可能ですか?あなたは、ループ内Users_Departments objectたびにインスタンス化する必要があり

+2

それはまだ同じオブジェクトです。ループ内の 'Users_Departments object = new Users_Departments();'を移動してください – XtremeBaumer

+0

@XtremeBaumerすごくありがとうございます:) – spc91

+0

副作用として、 'create'の中で' refresh'を呼び出す必要はありません(そして '手動で変更をフラッシュする'あなたが自動生成されたidを必要としない限り、おそらく冗長でもあります) – crizzis

答えて

1

は、次のように:

List <Users_Departments> userDeptList = new ArrayList<>(); 
for(int a=0 ; a < useridList.size();a++){ 
    Users_Departments object = new Users_Departments();    
    object.setDepartment(departmentDao.find(deptId)); 
    object.setStation(userDao.find(useridList.get(a))); 
    object.setCreatedDate(new Date()); 
    object.setUpdatedDate(new Date()); 

    Users_Departments newlyCreated = users_departmentsDao.create(object); 
    userDeptList.add(newlyCreated); 
} 
1

あなたは(したがって、それを更新する)は常に同じオブジェクトを保存するには、ループ内

Users_Departments object = new Users_Departments() ; 

を移動毎回新しいものを作成する

関連する問題