我有两个具有多对多关系的实体:
@Entity
public class Entity1 {
@Id
@GeneratedValue
private long id;
// Some other fields
@ManyToMany
@JoinTable(
name = "e1_e2",
joinColumns = { @JoinColumn(name = "e1_id", referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(name = "e2_id", referencedColumnName = "id") }
)
private Set<Entity2> e2s = new HashSet<>();
// Getters & setters
}
@Entity
public class Entity2 {
@Id
@GeneratedValue
private long id;
// Some other fields
@ManyToMany(mappedBy = "e2s")
private Set<Entity1> e1s = new HashSet<>();
// Getters & setters
}
我有一个包含Entity2
表单的网页。当我从多选中选择一些Entity1
并提交表单时,
我可以在控制器内看到所有选定的Entity1
都存储在e1s
中。然后,我尝试使用Entity2
保留新的JpaRepository::save()
。
Entity2
会被保留,但不会与Entity1
建立关系。 save()
调用包含在注释的服务方法中
与@Transactional
。为什么这种关系不会持续存在?
这是接收Entity2
:
@RequestMapping(method = RequestMethod.POST)
public String createSupplier(@ModelAttribute final Entity2 e2) {
service.create(e2);
return "redirect:/";
}
服务方法:
@Transactional
public Entity2 create(Entity2 e2) {
return repository.save(e2);
}
答案 0 :(得分:0)
将e1s的注释更改为@ManyToMany(cascade=CascadeType.ALL)
,以便将保存操作级联到相关实体。见http://docs.oracle.com/cd/E19798-01/821-1841/bnbqm/index.html