有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JDBC未将数据插入MS SQL Server

我不熟悉maven/spring boot,我有一个在服务器端使用这些技术的项目,我不能使用.save().saveAll()方法将数据插入ms sql server

{}有这些信息

spring:
  # datasource:
  #   url: jdbc:h2:mem:neoenergia;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
  #   driverClassName: org.h2.Driver
  #   username: sa
  #   password:
  datasource:
    initialization-mode: always
    url: jdbc:sqlserver://....;databaseName=...;user=sa;password=;
    driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver    
    username: sa
    password: ...
    platform: mssql
  tomcat:
    max-wait: 20000
    max-active: 50
    max-idle: 20
    min-idle: 15
  jpa:
    show-sql: true
    generate-ddl: false
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        # dialect: org.hibernate.dialect.H2Dialect
        generate_statistics: true
        jdbc.batch_size: 4
        order_inserts: true
        dialect: org.hibernate.dialect.SQLServerDialect
        format_sql: true
        id:
          new_generator_mappings: false
  # h2:
    # console.enabled: true
    # console.path: /h2-console
    # console.settings.trace: false
    # console.settings.web-allow-others: false

server:
   port: 8080

security:
  jwt:
    token:
      secret-key: secret-key
      expire-length: 300000

当我发送帖子时,用hibernate.generate_statistics=true运行服务器会记录以下内容:

2021-05-04 16:28:05.150  INFO 22396 --- [  restartedMain] DeferredRepositoryInitializationListener : Spring Data repositories initialized!        
2021-05-04 16:28:05.154  INFO 22396 --- [  restartedMain] com.neoenergia.NeoenergiaApplication     : Started NeoenergiaApplication in 3.345 seconds (JVM running for 2414.938)
2021-05-04 16:28:05.156  INFO 22396 --- [  restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged
2021-05-04 16:28:10.276  INFO 22396 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-05-04 16:28:10.277  INFO 22396 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'     
2021-05-04 16:28:10.282  INFO 22396 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 4 ms
2021-05-04 16:28:10.747  INFO 22396 --- [nio-8080-exec-1] i.StatisticalLoggingSessionEventListener : Session Metrics {
    150676700 nanoseconds spent acquiring 1 JDBC connections;
    0 nanoseconds spent releasing 0 JDBC connections;
    0 nanoseconds spent preparing 0 JDBC statements;
    0 nanoseconds spent executing 0 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    0 nanoseconds spent performing 0 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
    0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)
}

--控制器

package com.neoenergia.controller;

import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.neoenergia.dto.ContratoDTO;
import com.neoenergia.model.Contrato;
import com.neoenergia.service.ContratoService;

import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import com.neoenergia.repository.ContratoRepository;

@RestController
@RequestMapping("/cadastro")
@Api(tags = "Contrato")
public class ContratoController {

    @Autowired
    private ContratoService contratoService;

    @Autowired
    private ModelMapper modelMapper;
    
    @GetMapping("/contrato")
    @ApiOperation(value = "Obter contratos")
    public ResponseEntity<Map<String, Object>> get(
        @RequestParam(defaultValue = "") List<String> filter, 
        @RequestParam(defaultValue = "0") Integer page, 
        @RequestParam(defaultValue = "10") Integer pageSize) {      

        Page<Contrato> contrato = contratoService.get(filter, page, pageSize);

        Map<String, Object> response = new HashMap<>();     
          response.put("data", contrato.getContent()
            .stream()
            .map(obj -> modelMapper.map(obj, ContratoDTO.class))
            .collect(Collectors.toList()));
          response.put("pagina", contrato.getNumber()+1);
          response.put("registrosPorPagina", pageSize);
        response.put("totalRegistros", contrato.getTotalElements());
        response.put("totalPaginas", contrato.getTotalPages());
          
        return new ResponseEntity<>(response, HttpStatus.OK);
    }

    @GetMapping("/contrato/all")
    @ApiOperation(value = "Obter todos contratos")
    public ResponseEntity<Map<String, Object>> get(
        @RequestParam(defaultValue = "") List<String> filter) {     

        List<Contrato> contratos = contratoService.getAll(filter);

        Map<String, Object> response = new HashMap<>();     
          response.put("data", contratos
            .stream()
            .map(obj -> modelMapper.map(obj, ContratoDTO.class))
            .collect(Collectors.toList()));
          
        return new ResponseEntity<>(response, HttpStatus.OK);
    }

    
    @GetMapping("/contrato/{id}")
    @ApiOperation(value = "Obter contrato por id", response = ContratoDTO.class)
    public ContratoDTO getById(@PathVariable("id") Integer id) {        

        return modelMapper.map(contratoService.getById(id), ContratoDTO.class);
    }

@PostMapping("/contrato")
@ApiOperation(value = "Salvar contrato")
public void post(@RequestBody List<ContratoDTO> listaContratoDTO) {
    List<Contrato> contratos = new ArrayList<Contrato>();
    for(ContratoDTO item : listaContratoDTO){
        if (item.getId() != null) {
            put(Arrays.asList(item));
        } else if (item.getPer_mes_ano() != null) {             
            LocalDateTime periodo = ((Date) item
            .getPer_mes_ano())
            .toInstant()
            .atZone(ZoneOffset.UTC)
            .toLocalDateTime().withMinute(0).withSecond(0).withNano(0);
            Contrato contrato = modelMapper.map(item, Contrato.class);
            contrato.setPer_mes_ano(Date.from(periodo.atZone(ZoneOffset.UTC).toInstant()));
            contratos.add(contrato);
        }
        // else{                
        //  LocalDateTime dataInicial = item.getData_inicial()
        //  .toInstant()
        //  .atZone(ZoneOffset.UTC)
        //  .toLocalDateTime().withMinute(0).withSecond(0).withNano(0);
        //  LocalDateTime dataFinal = item.getData_final()
        //  .toInstant()
        //  .atZone(ZoneOffset.UTC)
        //  .toLocalDateTime().withMinute(0).withSecond(0).withNano(0);
            
        //  if(dataInicial.isBefore(dataFinal.plusHours(1))){
        //      for (LocalDateTime date = dataInicial; date.isBefore(dataFinal.plusHours(1)); date = date.plusHours(1)) {
        //          Contrato contrato = modelMapper.map(item, Contrato.class);
        //          contrato.setPer_mes_ano(Date.from(date.atZone(ZoneOffset.UTC).toInstant()));
        //          contratos.add(contrato);
        //      }
        //  }
        // }
    
    contratoService.post(contratos);
    }
}

    @PutMapping("/contrato")
    @ApiOperation(value = "Alterar contrato")
    public void put(@RequestBody List<ContratoDTO> listaContratoDTO) {      
        List<Contrato> contratos = new ArrayList<Contrato>();

        for(ContratoDTO item : listaContratoDTO){
            if(item.getPer_mes_ano() != null){
                LocalDateTime periodo = ((Date) item.getPer_mes_ano())
                .toInstant()
                .atZone(ZoneOffset.UTC)
                .toLocalDateTime().withMinute(0).withSecond(0).withNano(0);
                Contrato contrato = modelMapper.map(item, Contrato.class);
                contrato.setPer_mes_ano(Date.from(periodo.atZone(ZoneOffset.UTC).toInstant()));
                contratos.add(contrato);
            }
        }
        
        contratoService.put(contratos);
    }

    @DeleteMapping("/contrato/{ids}")
    @ApiOperation(value = "Excluir contrato")
    public void delete(@PathVariable("ids") Integer[] ids) {                
        contratoService.delete(ids);
    }
}

--服务

package com.neoenergia.service;

import java.util.List;

import com.neoenergia.model.Contrato;
import com.neoenergia.repository.ContratoRepository;
import com.neoenergia.specifications.SpecificationTypeResolver;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;

@Transactional
@Service
public class ContratoService {

    @Autowired
    private ContratoRepository contratoRepository;

    @Transactional
    public void post(List<Contrato> listaContratos) {
        contratoRepository.saveAll(listaContratos);
    }

    public Page<Contrato> get(List<String> filters, int page, int pageSize) {
        Pageable paging = PageRequest.of(page, pageSize, Sort.unsorted());
        
        Specification<Contrato> finalSpec = (entity, cq, cb) -> cb.conjunction();

        for(String item : filters){
            String[] filter = item.split(";");
            finalSpec = SpecificationTypeResolver.<Contrato>resolve(finalSpec, filter[0], filter[1], filter[2], Contrato.class);
        }
        return contratoRepository.findAll(finalSpec, paging);
    }

    public List<Contrato> getAll(List<String> filters){
        Specification<Contrato> finalSpec = (entity, cq, cb) -> cb.conjunction();

        for(String item : filters){
            String[] filter = item.split(";");
            finalSpec = SpecificationTypeResolver.<Contrato>resolve(finalSpec, filter[0], filter[1], filter[2], Contrato.class);
        }
        return contratoRepository.findAll(finalSpec);
    }

    public Contrato getById(int id) {
        return contratoRepository.findById(id).get();
    }

    public void put(List<Contrato> listaContratos) {
        for(Contrato item : listaContratos){
            contratoRepository.findById(item.getCod_processamento())
            .map(entity -> {
                entity.setCod_processamento(item.getCod_processamento());
                entity.setSg_processamento(item.getSg_processamento());             
                entity.setCod_periodo(item.getCod_periodo());
                entity.setPer_mes_ano(item.getPer_mes_ano());
                entity.setCod_submercado(item.getCod_submercado());
                entity.setSg_submercado(item.getSg_submercado());
                entity.setCod_perf_agente_vndd(item.getCod_perf_agente_vndd());
                entity.setSg_perf_agente_vndd(item.getSg_perf_agente_vndd());
                entity.setCod_perf_agente_cmpd(item.getCod_perf_agente_cmpd());
                entity.setSg_perf_agente_cmpd(item.getSg_perf_agente_cmpd());
                entity.setCq(item.getCq());
                entity.setPrc_base(item.getPrc_base());
                entity.setDt_base(item.getDt_base());
                entity.setDt_reajuste(item.getDt_reajuste());
                entity.setNum_cntr_cliqccee(item.getNum_cntr_cliqccee());
                entity.setNum_cntr_gene(item.getNum_cntr_gene());
                entity.setTp_agente(item.getTp_agente());
                entity.setFinalidade(item.getFinalidade());
                return contratoRepository.save(entity);
              })
              .orElseGet(() -> {
                return contratoRepository.save(item);
              });
        }       
    }

    public void delete(Integer[] ids) {
        for(Integer id : ids){
            contratoRepository.deleteById(id);
        }
    }
}

--存储库

package com.neoenergia.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.neoenergia.model.Contrato;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import javax.transaction.Transactional;

@Repository
@Transactional
public interface ContratoRepository extends JpaRepository<Contrato, Integer>, JpaSpecificationExecutor<Contrato> {
}

--模型

package com.neoenergia.model;

import java.util.Date;

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.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Entity
@Getter
@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "entr_cntr")
public class Contrato {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer cod_processamento;

    //@Column(length=100)
    private String sg_processamento;

    private Integer cod_periodo;

    private Date per_mes_ano;

    private Integer cod_submercado;

    //@Column(length=50)
    private String sg_submercado;

    private Integer cod_perf_agente_vndd;

    //@Column(length=50)
    private String sg_perf_agente_vndd;

    private Integer cod_perf_agente_cmpd;

    //@Column(length=50)
    private String sg_perf_agente_cmpd;

    //@Column(precision=18, scale=6)
    private Double cq;

    //@Column(precision=18, scale=2)
    private Double prc_base;

    private Date dt_base;

    // private Date data_inicial;

    // private Date data_final;

    private Integer dt_reajuste;

    private Integer num_cntr_cliqccee;

    //@Column(length=12)
    private String num_cntr_gene;

    //@Column(length=2)
    private String tp_agente;

    //@Column(length=75)
    private String finalidade;  

    public Integer getCod_processamento() {
        return cod_processamento;
    }

    public void setCod_processamento(Integer cod_processamento) {
        this.cod_processamento = cod_processamento;
    }

    public String getSg_processamento() {
        return sg_processamento;
    }

    public void setSg_processamento(String sg_processamento) {
        this.sg_processamento = sg_processamento;
    }

    public Integer getCod_periodo() {
        return cod_periodo;
    }

    public void setCod_periodo(Integer cod_periodo) {
        this.cod_periodo = cod_periodo;
    }

    public Date getPer_mes_ano() {
        return per_mes_ano;
    }

    public void setPer_mes_ano(Date per_mes_ano) {
        this.per_mes_ano = per_mes_ano;
    }

    public Integer getCod_submercado() {
        return cod_submercado;
    }

    public void setCod_submercado(Integer cod_submercado) {
        this.cod_submercado = cod_submercado;
    }

    public String getSg_submercado() {
        return sg_submercado;
    }

    public void setSg_submercado(String sg_submercado) {
        this.sg_submercado = sg_submercado;
    }

    public Integer getCod_perf_agente_vndd() {
        return cod_perf_agente_vndd;
    }

    public void setCod_perf_agente_vndd(Integer cod_perf_agente_vndd) {
        this.cod_perf_agente_vndd = cod_perf_agente_vndd;
    }

    public String getSg_perf_agente_vndd() {
        return sg_perf_agente_vndd;
    }

    public void setSg_perf_agente_vndd(String sg_perf_agente_vndd) {
        this.sg_perf_agente_vndd = sg_perf_agente_vndd;
    }

    public Integer getCod_perf_agente_cmpd() {
        return cod_perf_agente_cmpd;
    }

    public void setCod_perf_agente_cmpd(Integer cod_perf_agente_cmpd) {
        this.cod_perf_agente_cmpd = cod_perf_agente_cmpd;
    }

    public String getSg_perf_agente_cmpd() {
        return sg_perf_agente_cmpd;
    }

    public void setSg_perf_agente_cmpd(String sg_perf_agente_cmpd) {
        this.sg_perf_agente_cmpd = sg_perf_agente_cmpd;
    }

    public Double getCq() {
        return cq;
    }

    public void setCq(Double cq) {
        this.cq = cq;
    }

    public Double getPrc_base() {
        return prc_base;
    }

    public void setPrc_base(Double prc_base) {
        this.prc_base = prc_base;
    }

    // public Date getData_inicial() {
    //  return data_inicial;
    // }

    // public void setData_inicial(Date data_inicial) {
    //  this.data_inicial = data_inicial;
    // }

    // public Date getData_final() {
    //  return data_final;
    // }

    // public void setData_final(Date data_final) {
    //  this.data_final = data_final;
    // }

    public Date getDt_base() {
        return dt_base;
    }

    public void setDt_base(Date dt_base) {
        this.dt_base = dt_base;
    }

    public Integer getDt_reajuste() {
        return dt_reajuste;
    }

    public void setDt_reajuste(Integer dt_reajuste) {
        this.dt_reajuste = dt_reajuste;
    }

    public Integer getNum_cntr_cliqccee() {
        return num_cntr_cliqccee;
    }

    public void setNum_cntr_cliqccee(Integer num_cntr_cliqccee) {
        this.num_cntr_cliqccee = num_cntr_cliqccee;
    }

    public String getNum_cntr_gene() {
        return num_cntr_gene;
    }

    public void setNum_cntr_gene(String num_cntr_gene) {
        this.num_cntr_gene = num_cntr_gene;
    }

    public String getTp_agente() {
        return tp_agente;
    }

    public void setTp_agente(String tp_agente) {
        this.tp_agente = tp_agente;
    }

    public String getFinalidade() {
        return finalidade;
    }

    public void setFinalidade(String finalidade) {
        this.finalidade = finalidade;
    }
}

有人知道为什么数据不能持久保存在数据库中吗


共 (1) 个答案

  1. # 1 楼答案

    问题出在前端。 对系统进行编码的人之前创建了与后端和前端相关的不同型号。通过调整装载的对象以将正确的数据发送到服务器,可以将数据持久保存在数据库中

    与数据库中注册的数据不同,还使用了公共注册数据@Entity。在调整了数据库、控制器、服务和类之后,事务成功完成

    谢谢你的帮助