我有一个@OneToMany
JPA关联,其Curriculum
实例有几个WorkExperience
个实例。
我遇到的问题是,我希望能够将一个课程与单个实体经理中的一些 WorkExperience持续存在{{ 1}}来电。
我不确定如何将来自html表单的常规HTTP POST的多个实例的WorkExperience粘贴到Spring MVC模型属性中的java 集合/集 ...
首先,这有可能吗?如果是这样,那么什么样的HTML 可以在常规HTTP POST中发布数据集合/数组?
persist/save
JPA实体:
Curriculum
@Entity
public class Curriculum {
...
@OneToMany
private Set<WorkExperience> workExperiences;
...
JPA实体:
WorkExperience
答案 0 :(得分:1)
是的,有可能。 Spring MVC支持将Lists / Maps作为表单值发送。有效的方法是订阅价值。对于List,您可以使用列表编号,例如
<form:input path="myVal[1].property" />
对于地图,您使用地图键,如
<form:input path="myVal[key].property' />
这是假设您的模型属性具有所述项目的列表/地图。我建议使用DTO并翻译成您的实体。它可能有点过分,但是我在允许View直接操作我的Entity对象时遇到了问题。
另请注意:您必须执行一些View端编码才能动态添加/删除表单上的项目。这可能是一个真正的痛苦,因为删除不像你想象的那样工作。 Spring MVC能够添加到List / Map,改变List / Map中的项目,但我还没有找到直接从地图中删除项目的方法。我通常通过在我的DTO中添加“删除”布尔标志来处理删除,然后通过在List / Map中添加一个表单:隐藏元素来跟踪删除,并在我获得时清理服务器端的列表/地图它
在服务器端获得所有实体后,您必须存储它们。如果您希望这更具自动魔力,只需在您的父实体上设置注释,如
@OneToMany(cascade=CascadeType.PERSIST)
有几个CascadeType可用,所以选择一个有意义的。