SpringBoot JPA repository save method not working

10,161

The saveAll method in Spring Data is only available with Spring Data 2.x (the link you provided links always to the documentation of the latest version). However, with Spring Boot 1.5, it uses an older Spring Data version, where the following documentation applies: https://docs.spring.io/spring-data/data-commons/docs/1.13.10.RELEASE/api/

As you can see, here the method signature is

<S extends T> Iterable<S>   save(Iterable<S> entities)
Share:
10,161
Arun
Author by

Arun

Disclaimer: Opinions expressed are solely my own and do not express the views or opinions of my employer.

Updated on June 09, 2022

Comments

  • Arun
    Arun almost 2 years

    I will get List of JSONs from my MobileApp and I am converting those to a DataModel and then trying to insert the list of dataModel as a bulk.

    This is my Data Model or Entity Object.

    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import javax.persistence.*;
    import java.time.OffsetDateTime;
    
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Entity
    @Table(name = "cab_boarding")
    public class CabBoardingModel {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        Long id;
    
        @Column(name = "gpid")
        String gpid;
    
        @Column(name = "latitude")
        Long latitude;
    
        @Column(name = "longitude")
        Long longitude;
    
        @Column(name = "vehicle_number")
        String vehicleNumber;
    
        @Column(name = "boarding_time")
        OffsetDateTime boardingTime;
    
    }
    

    This is my Repository Interface

    public interface CBRepository extends CrudRepository<CabBoardingModel, Long> {
    
        List<CabBoardingModel> findAll();
    
        List<CabBoardingModel> save(List<CabBoardingModel> cabBoardingModels);
    
        Optional<CabBoardingModel> findById(Long id);
    
    }
    

    Below is the service tier that calls this save method

    @Service
    public class CBService {
    
    
        private CBRepository cbRepository;
    
        @Autowired
        public CBService(CBRepository cbRepository) {
            this.cbRepository = cbRepository;
        }
    
    
        public List<CabBoardingModel> create(List<CabBoardingModel> cabBoardingModelList) {
            List<CabBoardingModel> cbCreatedList = cbRepository.save(cabBoardingModelList);
            return cbCreatedList;
        }
    }
    

    Getting the below exception while accessing the save method

     2018-02-15 23:49:03.407 ERROR [smpoc-service-cabboarding,1b921dc7bf735306,1b921dc7bf735306,false] 2988 --- [nio-8080-exec-1] f.c.b.a.w.e.h.ControllerExceptionHandler : Unexpected exception
    
    org.springframework.beans.NotReadablePropertyException: Invalid property 'id' of bean class [java.util.ArrayList]: Could not find field for property during fallback access!
        at org.springframework.data.util.DirectFieldAccessFallbackBeanWrapper.getPropertyValue(DirectFieldAccessFallbackBeanWrapper.java:56) ~[spring-data-commons-1.13.10.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.getId(JpaMetamodelEntityInformation.java:149) ~[spring-data-jpa-1.11.10.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.AbstractEntityInformation.isNew(AbstractEntityInformation.java:51) ~[spring-data-commons-1.13.10.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.isNew(JpaMetamodelEntityInformation.java:227) ~[spring-data-jpa-1.11.10.RELEASE.jar:na]
        at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:507) ~[spring-data-jpa-1.11.10.RELEASE.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:513) ~[spring-data-commons-1.13.10.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:498) ~[spring-data-commons-1.13.10.RELEASE.jar:na]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:475) ~[spring-data-commons-1.13.10.RELEASE.jar:na]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.14.RELEASE.jar:4.3.14.RELEASE]
        at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56) ~[spring-data-commons-1.13.10.RELEASE.jar:na]
    
  • Arun
    Arun about 6 years
    I tried using save method. I get org.springframework.beans.NotReadablePropertyException: Invalid property 'id' of bean class [java.util.ArrayList]: Could not find field for property during fallback access!
  • dunni
    dunni about 6 years
    Please update your question with the changed code and specify, what exactly you did.
  • dunni
    dunni about 6 years
    Can you add the code, where you actually call the save method?
  • dunni
    dunni about 6 years
    You just have to remove your custom save method and use the one which is already part of the CrudRepository interface
  • Yuriy Tsarkov
    Yuriy Tsarkov about 6 years
    Agree with @dunny, use inbox repository interface instead of you custom implementation