java - Spring boot 添加多行

标签 java spring spring-boot jsp spring-data-jpa

我试图在数据库中保存多条记录,但无法保存。我一次只能保存 1 行。我已经按照下面的链接示例进行了操作。但仍然出现错误:

Spring mvc add multiple rows

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>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<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 

最佳答案

请提供来自 cREffortsDetailsS​​ervice 的代码。

如果您正在使用 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/

相关文章:

Java - 从多个 ArrayList 中获取值

spring - Cxf 拦截器作为具有 Autowiring 字段的 spring bean,使用普通注释配置

json - 在 YAML 文件中设置 DEFAULT_VIEW_INCLUSION

java - Spring boot - 如何获取运行端口和ip地址

java - 带 Spring Boot 2.0.0 的 Keycloak Rest api 包装器

java - 如何获得 Java 中唯一字符串列表的随机排序?

java - Eclipse 插件无法与 GlassFish 服务器通信,请检查防病毒软件是否阻止或监控此端口

java - 请帮我找到正则表达式来分割我的字符串

java - Spring Boot或者Tomcat缓存静态资源,每次刷新都得重新构建

java - 如何在thymeleaf模板中添加html标签?