0
假設我有一個單向的許多一對多的關係:JPA - 使用現有實體時是否需要多對多級聯?
@Entity
@Table(name = "document")
public class Document {
private Integer id;
private Set<Role> roles;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "document_role",
joinColumns = {@JoinColumn(name = "Document_Id")},
inverseJoinColumns = {@JoinColumn(name = "Role_Id")})
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
@Entity
@Table(name = "role")
public class Role {
private Integer id;
...
}
將下列插入到document_role如果沒有級聯類型的定義,並假設沒有新的角色的實體將不得不被創造出來的?
Role role1 = em.find(Role.class, 1);
Role role2 = em.find(Role.class, 2);
Role role3 = em.find(Role.class, 3);
Set<Role> roles = new HashSet<>();
roles.add(role1);
roles.add(role2);
roles.add(role3);
Document document = new Document();
document.setRoles(roles);
// Save document, will that save the association?
em.persist(document);
如果我還想更新角色集合並刷新更改,該怎麼辦?例如刪除一個角色或添加另一個角色。
謝謝您的回答,但在這種情況下,沒有DocumentRole實體,如果這就是你說的話,你可能已經注意到了關聯映射與@JoinTable,所以我試圖找到解釋了一些官方規格當沒有定義級聯時,多對多關聯表(document_id,role_id)會發生什麼情況。 –
@MichalisDaniilakis是的,我讀錯,我去編輯答案,但作爲FAS你問JPA只更新實體屬性欄,如果你更新文檔不相關的實體,僅文件被更新,也沒有作用,因爲你不沒有級聯http://stackoverflow.com/questions/15835741/jpa-update-doesnt-work-in-a-many-to-many-relationship – karelss