Spring boot 如何在Sprig引导中进行批插入

Spring boot 如何在Sprig引导中进行批插入,spring-boot,Spring Boot,我从CSV文件中读取记录,同时插入以下异常 org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation : com.crimsonlogic.cng.aciocean.model.TaciOcnA6aShipment.taciOcnA6aHeader

我从CSV文件中读取记录,同时插入以下异常

org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation : com.crimsonlogic.cng.aciocean.model.TaciOcnA6aShipment.taciOcnA6aHeader -> com.crimsonlogic.cng.aciocean.model.TaciOcnA6aHeader
        at org.hibernate.action.internal.UnresolvedEntityInsertActions.checkNoUnresolvedActionsAfterOperation(UnresolvedEntityInsertActions.java:122) ~[hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
        at org.hibernate.engine.spi.ActionQueue.checkNoUnresolvedActionsAfterOperation(ActionQueue.java:436) ~[hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
        at org.hibernate.internal.SessionImpl.checkNoUnresolvedActionsAfterOperation(SessionImpl.java:577) ~[hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
        at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:720) ~[hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
        at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:696) ~[hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
        at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:366) ~[spring-orm-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
        at com.sun.proxy.$Proxy145.persist(Unknown Source) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:564) ~[?:?]
        at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:314) ~[spring-orm-5.2.5.RELEASE.jar!/:5.2.5.RELEASE]
以下为代码快照:

TaciOcnA6aHeader taciOcnA6aHeader = null;
        
        List<TaciOcnA6aHeader> taciOcnA6aHeaders = new ArrayList<>();
        List<TaciOcnA6aContainer> taciOcnA6aContainers = new ArrayList<>();
        List<TaciOcnA6aShipment> taciOcnA6aShipments = new ArrayList<>();
        
        for (int i = 0; i < a6aHeaders.size(); i++) {
            A6ARecord csvParsingRecord = a6aHeaders.get(i);
            
            if(!StringUtils.isEmpty(csvParsingRecord.getSno())) {
                taciOcnA6aHeader = new TaciOcnA6aHeader();
                
                //Set Header Records.
                if(!StringUtils.isEmpty(csvParsingRecord.getFormType())) taciOcnA6aHeader.setDocFormat(csvParsingRecord.getFormType().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCarrierCode())) taciOcnA6aHeader.setCarrierCode(csvParsingRecord.getCarrierCode().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCargoControlNumber())) taciOcnA6aHeader.setCcn(csvParsingRecord.getCargoControlNumber().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getModeOfTransport())) taciOcnA6aHeader.setMot(csvParsingRecord.getModeOfTransport().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCustomsProcedure())) taciOcnA6aHeader.setCustomsProcedure(csvParsingRecord.getCustomsProcedure().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getSupplementaryReqInd())) taciOcnA6aHeader.setSupplementaryReqInd(csvParsingRecord.getSupplementaryReqInd().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getBillOfLadingNumber())) taciOcnA6aHeader.setBolNo(csvParsingRecord.getBillOfLadingNumber().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getSpecialInstructions())) taciOcnA6aHeader.setSpecialIns(csvParsingRecord.getSpecialInstructions().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getBulkShipment())) taciOcnA6aHeader.setBulkShipment(csvParsingRecord.getBulkShipment().toUpperCase());
                
                //Set Schedule Records.
                if(!StringUtils.isEmpty(csvParsingRecord.getA6ConvRefNo())) taciOcnA6aHeader.setA6ConvRefNo(csvParsingRecord.getA6ConvRefNo().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getVesselName())) taciOcnA6aHeader.setVesselName(csvParsingRecord.getVesselName().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getVoyageNo())) taciOcnA6aHeader.setVoyageNo(csvParsingRecord.getVoyageNo().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getPortOfLoading())) taciOcnA6aHeader.setPortOfLoading(csvParsingRecord.getPortOfLoading().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getEstimatedLoadingDate()) && !StringUtils.isEmpty(csvParsingRecord.getEstimatedLoadingTime())) taciOcnA6aHeader.setEstimatedLoadingDate(NADateUtil.convertStringToDate(csvParsingRecord.getEstimatedLoadingDate() + csvParsingRecord.getEstimatedLoadingTime(), "ddMMyyyyhhmm"));
                if(!StringUtils.isEmpty(csvParsingRecord.getFirstPortOfArrival())) taciOcnA6aHeader.setPortOfArrival(csvParsingRecord.getFirstPortOfArrival().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCustomsOfficeOfPortOfArrivalManifestFrom())) taciOcnA6aHeader.setCustomsoffPoa(csvParsingRecord.getCustomsOfficeOfPortOfArrivalManifestFrom().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCustomsOfficeOfPortOfArrivalSublocationCode())) taciOcnA6aHeader.setCustomsoffPoaSubloc(csvParsingRecord.getCustomsOfficeOfPortOfArrivalSublocationCode().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCityOfCargoLoading())) taciOcnA6aHeader.setCargoLoadingCity(csvParsingRecord.getCityOfCargoLoading().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getPortOfCargoLoading())) taciOcnA6aHeader.setCargoLoadingPort(csvParsingRecord.getPortOfCargoLoading().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCountryOfCargoDestination())) taciOcnA6aHeader.setCargoDestinationCountry(csvParsingRecord.getCountryOfCargoDestination().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCityOfCargoDestination())) taciOcnA6aHeader.setCargoDestinationCity(csvParsingRecord.getCityOfCargoDestination().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getPortOfCargoDestination())) taciOcnA6aHeader.setCargoDestinationPort(csvParsingRecord.getPortOfCargoDestination().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCustomsOfficeOfManifestDestinationManifestTo())) taciOcnA6aHeader.setCustomsoffManidest(csvParsingRecord.getCustomsOfficeOfManifestDestinationManifestTo().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCustomsOfficeOfManifestDestinationSublocationCode())) taciOcnA6aHeader.setCustomsoffManidestSubloc(csvParsingRecord.getCustomsOfficeOfManifestDestinationSublocationCode().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getCustomsOfficeOfDischarge())) taciOcnA6aHeader.setCustomsoffDischarge(csvParsingRecord.getCustomsOfficeOfDischarge().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getTerminalName())) taciOcnA6aHeader.setTerminalName(csvParsingRecord.getTerminalName().toUpperCase());
                if(!StringUtils.isEmpty(csvParsingRecord.getNameOfCarrier())) taciOcnA6aHeader.setCarrierName(csvParsingRecord.getNameOfCarrier().toUpperCase());
                
                //Set Party Records.
                taciOcnA6aHeader.setTaciOcnA6aParties(setA6AParties(taciOcnA6aHeader,csvParsingRecord));
            }
            
            //Set Container Records.
            if(null != taciOcnA6aHeader && !StringUtils.isEmpty(csvParsingRecord.getContainerNo()) && !StringUtils.isEmpty(csvParsingRecord.getContainerStatus())) {
                taciOcnA6aContainers.add(setA6AContainer(taciOcnA6aHeader, csvParsingRecord));
                taciOcnA6aHeader.setTaciOcnA6aContainers(taciOcnA6aContainers);
            }
            
            //Set Goods Details.
            if(null != taciOcnA6aHeader && !StringUtils.isEmpty(csvParsingRecord.getItemDesc()) && !StringUtils.isEmpty(csvParsingRecord.getNoOfPkgs())) {
                taciOcnA6aShipments.add(setA6AShipment(taciOcnA6aHeader, csvParsingRecord));
                taciOcnA6aHeader.setTaciOcnA6aShipments(taciOcnA6aShipments);
            }
            
            //Set all values to header details.
            
            taciOcnA6aHeaders.add(taciOcnA6aHeader);
        }
        
        //Validate the A6A Records.
        /*for (TaciOcnA6aHeader a6aHeaderDTO : taciOcnA6aHeaders) {
            validateSave(a6aHeaderDTO); 
        }*/
        
        //Save Record to DB after parsing.
        System.out.println("Size of the header is ::: " + taciOcnA6aHeaders.size());
        
        for (int i = 0; i < taciOcnA6aHeaders.size() ; i++) {
            System.out.println("i value is ::: " + i);
            TaciOcnA6aHeader header = taciOcnA6aHeaders.get(i);
            System.out.println("12345!!!!!!!!!!!!" + header.getCcn());
            a6aRepository.saveAndFlush(header);
        }
TaciOcnA6aHeader TaciOcnA6aHeader=null;
List taciOcnA6aHeaders=new ArrayList();
List taciOcnA6aContainers=new ArrayList();
List taciOcnA6aShipments=new ArrayList();
对于(int i=0;iList<className> list = new ArrayList<>();
try {      
    BufferedReader br = new BufferedReader(new FileReader("filename"));       
    String line = br.readLine();       
    while ((line = br.readLine()) != null) {            
        String fields[] = line.split(",");             
        ClassName object = new ClassName();       
        object.setColumn(fields[column_number]);             
        list.add(object);         
    }
} catch (Exception e) 
{         
   e.printStackTrace();     
}