Есть несколько проблем с вашим кодом.
Первый: вы не уважаете соглашения об именах. переменные должны начинаться со строчной буквы. Это делает ваш код труднее читать для опытных Java-программистов.
Второй: вы перебираете свои идентификаторы предметов и меняете значения ваших ItemprofilPk
и Itemprofil
объектов. Но вы обновляете всегда одни и те же объекты и сохраняете элемент только после цикла. поэтому, конечно, сохраняется только последнее значение. Измените что-то вроде этого:
for (Integer val : getListidItemByItemName()) {
AssociationItemProfilPK itemprofilPk = new AssociationItemProfilPK();
AssociationItemProfil itemprofil = new AssociationItemProfil();
itemprofilPk.setItemId(val);
itemprofilPk.setProfilId(user.getProfilUserId());
itemprofil.setAssociationItemProfilPK(itemprofilPk);
em.persist(itemprofil);
}
Третий: ваше отображение более сложное, чем нужно для id. У вас не должно быть объекта для сопоставления таблицы ассоциации. Вместо этого у вас должен быть список элементов в сущности ProfilUser
и список profilUsers в сущности Item
:
public class ProfilUser {
@ManyToMany
@JoinTable(
name = "associationProfileUserItem",
joinColumns = @JoinColumn(name = "PROFIL_ID"),
inverseJoinColumns=@JoinColumn(name="ITEM_ID")
private List<Item> items;
}
public class Item {
@ManyToMany(mappedBy = "items")
private List<ProfilUser profilUsers;
}