我试图在数据库中保存多条记录,但无法保存。我一次只能保存 1 行。我已经按照下面的链接示例进行了操作。但仍然出现错误:
Controller.java
这是我的 Controller 类:
@PostMapping("/saveCREfforts")
public String saveCREfforts(@ModelAttribute("creffortdetailsForm") CREffortDetailsListForm cREffortDetailsListForm,, Model model, BindingResult bindingResult) {
for(CREffortDetails crEfforts : cREffortDetailsListForm.getcREffortDetails()) {
System.out.println(" crEffortr.getCrNumber :::: : "+crEfforts.getCrNumber());
cREffortsDetailsService.save(crEfforts);
}
return "AddCREfforts";
}
JSP
这是 JSP 页面。
我用过<form:form>
Spring Boot 的标签。
<form:select name="task" style="width:100%;" path="CREffortDetails[0].task" value="task">
<form:option value="Documentation Creation / Updation" >Documentation Creation / Updation</form:option>
<form:option value="Design and development">Design and development</form:option>
<form:option value="Build">Build</form:option>
<form:option value="Deployment to lower environments (AM2/AM3/QA/TSTB)">Deployment to lower environments (AM2/AM3/QA/TSTB)</form:option>
<form:option value="Unit Testing">Unit Testing</form:option>
<form:option value="System Testing">System Testing</form:option>
<form:option value="Unit Testing">Unit Testing</form:option>
<form:option value="Review Efforts">Review Efforts</form:option>
<form:option value="UAT Testing Support">UAT Testing Support</form:option>
<form:option value="Deployment to Production">Deployment to Production</form:option>
</form:select>
</td>
<td>
<form:select name="weekNumber" style="width:100%;" path="CREffortDetails[0].weekNumber" value="weekNumber">
<form:option value="WK39">WK39</form:option>
<form:option value="WK40">WK40</form:option>
<form:option value="WK41">WK41</form:option>
<form:option value="WK42">WK42</form:option>
<form:option value="WK43">WK43</form:option>
<form:option value="WK44">WK44</form:option>
</form:select>
</td>
<td>
<form:input path="CREffortDetails[0].plannedHours" value="" style="width:100%;" />
</td>
<td>
<form:input path="CREffortDetails[0].actualHours" value="" style="width:100%;" />
</td>
<form:input type="hidden" path="CREffortDetails[0].crNumber" style="width:100%;" />
</tr>
<tr>
<td>
<form:select name="task" style="width:100%;" path="CREffortDetails[1].task" value="task">
<form:option value="Documentation Creation / Updation" >Documentation Creation / Updation</form:option>
<form:option value="Design and development">Design and development</form:option>
<form:option value="Build">Build</form:option>
<form:option value="Deployment to lower environments (AM2/AM3/QA/TSTB)">Deployment to lower environments (AM2/AM3/QA/TSTB)</form:option>
<form:option value="Unit Testing">Unit Testing</form:option>
<form:option value="System Testing">System Testing</form:option>
<form:option value="Unit Testing">Unit Testing</form:option>
<form:option value="Review Efforts">Review Efforts</form:option>
<form:option value="UAT Testing Support">UAT Testing Support</form:option>
<form:option value="Deployment to Production">Deployment to Production</form:option>
</form:select>
</td>
<td>
<form:select name="weekNumber" style="width:100%;" path="CREffortDetails[1].weekNumber" value="weekNumber">
<form:option value="WK39">WK39</form:option>
<form:option value="WK40">WK40</form:option>
<form:option value="WK41">WK41</form:option>
<form:option value="WK42">WK42</form:option>
<form:option value="WK43">WK43</form:option>
<form:option value="WK44">WK44</form:option>
</form:select>
</td>
<td>
<form:input path="CREffortDetails[1].plannedHours" value="" style="width:100%;" />
</td>
<td>
<form:input path="CREffortDetails[1].actualHours" value="" style="width:100%;" />
</td>
<form:input type="hidden" path="CREffortDetails[1].crNumber" style="width:100%;" />
</tr>
</table>
<div align="center">
<table align="right">
<tr>
<!-- <input type="submit" value="SAVE" /> -->
<button class="button"><span>SAVE</button>       
<button class="button"><span>CLEAR</button>
</tr>
</table>
<br><br>
</form:form>
Bean类
这是实体类。我们正在尝试通过JPA将表单数据存储到数据库中。
@Entity
@Table(name = "CREFFORTFORM")
public class CREffortDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String crNumber;
private String description;
private String task;
private String weekNumber;
private String plannedHours;
private String actualHours;
private String totalPlannedHours;
private String totalActualHours;
@ManyToMany(mappedBy = "creffortdetails")
private Set<CRDataForm> crdataform;
public Set<CRDataForm> getCrdataform() {
return crdataform;
}
public void setCrdataform(Set<CRDataForm> crdataform) {
this.crdataform = crdataform;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCrNumber() {
return crNumber;
}
带有列表的 Bean 类形式:
这是一个用于迭代多行记录的列表形式。
public class CREffortDetailsListForm {
private List<CREffortDetails> cREffortDetails;
public List<CREffortDetails> getcREffortDetails() {
return cREffortDetails;
}
public void setcREffortDetails(List<CREffortDetails> cREffortDetails) {
this.cREffortDetails = cREffortDetails;
}
}`
我在加载页面时收到以下 JSP 错误。
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Fri Oct 18 17:46:57 IST 2019
There was an unexpected error (type=Internal Server Error, status=500).
Invalid property 'CREffortDetails[0]' of bean class [com.demandTracker.auth.model.CREffortDetails]: Bean property 'CREffortDetails[0]' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
org.springframework.beans.NotReadablePropertyException: Invalid property 'CREffortDetails[0]' of bean class [com.demandTracker.auth.model.CREffortDetails]: Bean property 'CREffortDetails[0]' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
at
最佳答案
请提供来自 cREffortsDetailsService 的代码。
如果您正在使用 SpringDataJpa,我认为您可能是因为您将该标签添加到问题中,您应该能够使用 <S extends T> List<S> saveAll(Iterable<S> entities);
方法,而不是使用 <S extends T> S save(S entity);
一次保存一个方法。
如果您想使用 hibernate 批量插入来调整性能,您将需要考虑调整此属性:
spring:
jpa:
properties:
hibernate.jdbc.batch_size: 15
关于java - Spring boot 添加多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58450699/