我使用 JPA、Hibernate、Spring boot
我有一個 jpa 問題:當我保存一個擁有多對多關聯和 CascadeType.MERGE 屬性的物體時,子物體在它已經存在于資料庫表中時被創建
我有以下物體
@Entity
@Table(name = "ENTITY")
@NoArgsConstructor
@AllArgsConstructor
public class EntityList implements Serializable {
........................
........................
@ManyToMany(cascade=CascadeType.MERGE)
@JoinTable( name = "entity_delegate",
joinColumns = @JoinColumn(name = "entity_id"),
inverseJoinColumns = @JoinColumn(name = "utilisateur_id") )
private List<Utilisateur> delegates = new ArrayList<>();
.......................
.......................
}
Utilisateur 物體如下
@Entity
@Table(name = "UTILISATEUR")
@NoArgsConstructor
@AllArgsConstructor
public class Utilisateur implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@NotNull
private Integer id;
private String firstname;
private String lastname;
private String accountAD;
private String fonction;
.....................
.....................
}
在資料庫中,資料庫中已存在以下 Utilisateur
id firstname lastname accountad fonction
44 "StaffAccess02" "FINS" "StaffAccess02" null
當我應用以下代碼時
EntityList entity = entityListList.get(0);
List<Utilisateur> delegates = new ArrayList<>();
delegates.add(new Utilisateur("StaffAccess02", "FINS", "StaffAccess02", null));
entity.setDelegates(delegates);
entity = entityListRepository.save(entity);
創建具有相同列值的第二行:
id firstname lastname accountad fonction
51 "StaffAccess02" "FINS" "StaffAccess02" null
如何防止這種情況?
uj5u.com熱心網友回復:
雖然使用了 CascadeType.MERGE,但是子物體的 id 列是自動生成的 id。
List<Utilisateur> delegates = new ArrayList<>();
delegates.add(new Utilisateur("StaffAccess02", "FINS", "StaffAccess02", null));
entity.setDelegates(delegates);
這段代碼通過在每次保存時在 id 列中添加一個新的序列號來創建一個新記錄。
解決方案1:洗掉@GeneratedValue并在建構式中提及id值
new Utilisateur(44,"StaffAccess02", "FINS", "StaffAccess02", null)
解決方案2:從db獲取arraylist,然后修改子物體再保存
Utilisateur u=UtilisateurRepository.getById(44);
//modify u object here
List<Utilisateur> delegates = new ArrayList<>();
delegates.add(u);
entity.setDelegates(delegates);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395956.html
上一篇:查找泛型型別的類參考
