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
たびにインスタンス化する必要があり
それはまだ同じオブジェクトです。ループ内の 'Users_Departments object = new Users_Departments();'を移動してください – XtremeBaumer
@XtremeBaumerすごくありがとうございます:) – spc91
副作用として、 'create'の中で' refresh'を呼び出す必要はありません(そして '手動で変更をフラッシュする'あなたが自動生成されたidを必要としない限り、おそらく冗長でもあります) – crizzis