首页 > 解决方案 > 为什么我得到 org.springframework.beans.NotReadablePropertyException?

问题描述

这是我的模型课:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="[exclusive_data]")
public class OrderControlDataBean {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name="id")
   Long id;

   @Column(name = "Body_Code")
   String bodyCode;

    @Column(name = "Merchant_Item_No")
   String merchantItemNo;

   @Column(name = "Merchant_No")
   String no;   
}

这是我的存储库界面

   import java.util.List;
   import org.springframework.data.jpa.repository.JpaRepository;
   import org.springframework.stereotype.Repository;
   import org.springframework.transaction.annotation.Transactional;
   import com.mypackage.mss.oas.filetransfer.app.model.OrderControlDataBean;

    @Repository
    @Transactional
    public interface OrderControlRepository extends 
     JpaRepository<OrderControlDataBean, Long> {

    public void deleteAllInBatch();

     List<OrderControlDataBean> save(List<OrderControlDataBean> 
     orderControlDataBeans);

 }

下面是调用此保存方法的服务层:

 @Service
 @EnableScheduling
 public class FTPClientService {

private static final Logger logger = 
       LoggerFactory.getLogger(FTPClientService.class);

       try {
        // FTP Client connection code here//
        BufferedReader reader = new BufferedReader(new 
         InputStreamReader(inputStream));
        String line = null;
        while ((line = reader.readLine()) != null) {

            OrderControlDataBean orderControlBean = extractOrderControlBean(line);

            if (!(orderControlBean.getBodyCode() == null))
                if (!(orderControlBean.getMerchantItemNo() == null))
                    if (!(orderControlBean.getNo() == null))
                        inputList.add(orderControlBean);
        }

        success = ftpClient.completePendingCommand();
        repository.deleteAllInBatch();
        repository.save(inputList);
    } catch (IOException ex) {
        logger.error("Error: " + ex.getMessage());
        ex.printStackTrace();
    } catch (Exception e) {
        logger.error("Error: " + e.getMessage());
        e.printStackTrace();
    } finally {
        try {
            if (ftpClient.isConnected()) {
                ftpClient.logout();
                ftpClient.disconnect();
            }
        } catch (IOException ex) {
            logger.error("Error while closing the FTP connection.");
            ex.printStackTrace();
        }
    }

    logger.info("Loading OrderControl Data Completed Successfully");
}

我正在从 ftp 数据中填充 arraylist,读取它的保存到数据库失败。无论我做什么,我都会遇到异常:

org.springframework.beans.NotReadablePropertyException:bean 类 [java.util.ArrayList] 的无效属性“id”:在回退访问期间找不到属性字段!

数据库表的 id [id] [int] IDENTITY(1,1) NOT NULL。这是 ms sql 服务器。

有人可以帮忙吗?

谢谢

标签: springspring-bootjpaspring-data-jpalombok

解决方案


我相信您需要将方法调用Logger从更改repository.save(inputList)repository.saveAll(inputList)

JpaRepository接口将为您提供所有必要的方法,Spring 将在幕后完成繁重的工作。事实上,我相信你不需要在中实现任何方法,OrderControlRepository甚至不需要使用@JpaRepository注解。实施JpaRepository应该就足够了。

一个简单的使用 Spring 的很好的演练在这里:https ://spring.io/guides/gs/accessing-data-jpa/ 。有关更多详细信息,您可以访问此处:https ://docs.spring.io/spring-data/jpa/docs/current/reference/html/

让我知道这是否有效!


推荐阅读