假设我有一个单向的多对多关系:
@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;
...
}
如果没有定义Cascade类型并且假设不需要创建新的Role实体,那么下面是否会插入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);
如果我还想更新角色集合并刷新更改,该怎么办?例如删除一个角色或添加另一个角色。
答案 0 :(得分:0)
简短的回答是否定的。
长答案是每个表对于CRUD都是唯一的。
实施例: 如果文档表的列id_role是角色表的外键,并且您更新了此数据,则持久化文档将更新此列,因为它是Document表的属性,它对Role对象不起任何作用。