Почему я получаю org.springframework.beans.NotReadablePropertyException? - PullRequest
0 голосов
/ 07 июня 2018

Это мой класс модели:

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. Сбой при сохранении в базу данных.Я получаю исключение ниже независимо от того, что я делаю:

org.springframework.beans.NotReadablePropertyException: недопустимое свойство 'id' класса бина [java.util.ArrayList]: не удалось найти поле для свойстваво время резервного доступа!

Таблица базы данных имеет идентификатор [id] [int] IDENTITY (1,1) NOT NULL.Это MS SQL Server.

Кто-нибудь может помочь?

Спасибо

1 Ответ

0 голосов
/ 08 июня 2018

Я считаю, что вам нужно изменить вызов метода в 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/

Дайте мне знать, если это работает!

...