如何从具有多个数据库的 API 存储视图

问题描述 投票:0回答:0

我无法将我的数据放入另一个来自另一个连接的表中。 我真的需要这方面的帮助,而我缺乏这方面的经验让我很受打击。在我当前的场景中,我与一个 DBMS 建立了连接,该 DBMS 与特定银行位于同一网络上,我将其称为银行 A。 在这家银行 A 中,DBMS 将是 Fire bird,在这家银行中,我有一个视图使用了这家银行 A 的多个列和表, 在连接到多个 SGBDS 的同一 API 中,我有一个 Postgres 银行,我将举一个银行 B 的示例,在其中,我创建了一个实体 从银行 A 接收视图数据,

Application.Properties


   **BANK A**
`
  alu.datasource.username:SYSDBA
  alu.datasource.password:masterkey       
    alu.datasource.jdbcUrl:jdbc:firebirdsql:192.011.2.55/3050:C:db/test.fdb
  alu.datasource.hikari.connection-timeout = 20000
  alu.datasource.hicari.minimum-idle = 10
  alu.datasource.hicari.maximum-pool-size = 40 
  alu.datasource.hicari.idle-timeout = 10000
  alu.datasource.hicari.auto-commit = true

**BANK B**

`integracao.jpa.hibernate.ddl-auto=update
 integracao.datasource.jdbcUrl=jdbc:postgresql://localhost/Integracao           
 integracao.datasource.username=postgres
 integracao.datasource.password=1234
 integracao.datasource.hikari.connection-timeout = 20000
 integracao.datasource.hicari.minimum-idle = 10
 integracao.datasource.hicari.maximum-pool-size = 40 
 integracao.datasource.hicari.idle-timeout = 10000
 integracao.datasource.hicari.auto-commit = true

`

 **Database DBMS configuration A**

`package com.XXXXXXXX.XXXXXXXXXXXXXXX.config.alu;
 import javax.sql.DataSource;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.jdbc.DataSourceBuilder;
 import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
 import com.XXXXXXX.XXXXXXXXXXX.repository.alu.XXXXXRepository;
 import java.util.HashMap;
  import java.util.Map;

 @Configuration
 @EnableJpaRepositories(
    basePackageClasses = XXXXXXRepository.class,
    entityManagerFactoryRef = "aluEntityManager")
 public class AluDbConfig {

@Bean
@ConfigurationProperties(prefix = "alu.datasource")
public DataSource aluDataSource() {
    return  DataSourceBuilder.create().build();
}

@Bean
@Qualifier
public LocalContainerEntityManagerFactoryBean aluEntityManager(
        EntityManagerFactoryBuilder builder) {
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("hibernate.hbm2ddl.auto", "update");
    return builder
            .dataSource(aluDataSource())
            .packages("com.XXXXXXXXXXX.XXXXXXXXXXXXXXXXX.entity.alu")
            .properties(properties)
            .build();
}

   }

  `


  **Database DBMS configuration B**

  `package com.XXXXXXXX.XXXXXXXXXXXXXXX.config.alu;
  import javax.sql.DataSource;
  import org.springframework.beans.factory.annotation.Qualifier;
  import org.springframework.boot.context.properties.ConfigurationProperties;
  import org.springframework.boot.jdbc.DataSourceBuilder;
  import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.context.annotation.Primary;
  import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  import com.xxxxxxx.xxxxxxxxxxxxxxx.repository.integracao.IntegracaoRepository;
  import java.util.HashMap;
  import java.util.Map;


  @Configuration
  @EnableJpaRepositories(
    basePackageClasses = IntegracaoRepository.class,
    entityManagerFactoryRef = "integracaoEntityManager")
  public class IntegracaoDbConfig {

@Bean
@ConfigurationProperties(prefix = "integracao.datasource")
@Primary
public DataSource canDataSource() {
    return  DataSourceBuilder.create().build();
}

@Bean
@Qualifier
@Primary
public LocalContainerEntityManagerFactoryBean integracaoEntityManager(
        EntityManagerFactoryBuilder builder) {
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("hibernate.hbm2ddl.auto", "update");
    return builder
            .dataSource(canDataSource())
            .packages("com.XXXXXXXX.XXXXXXXXXXXXXXXXXXXXX.entity.integracao")
            .properties(properties)
            .build();
}
  }
    `
**Controller**

`package com.xxxxxxxx.xxxxxxxxxxxx.controller;
 import java.util.ArrayList;
 import java.util.List;
 import com.xxxxxxxx.xxxxxxxxxxxxxx.repository.alu.xxxxxxxxRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
import com.xxxxxxxxxx.xxxxxxxxxxxxxxxx.entity.integracao.Integracao;


@RestController
@RequestMapping(value = "/projecao")
public class IntegracaoController {

@Autowired
private xxxxxxxxRepository repository; => (Note: I had to hide the name, but this repository would    be from bank A)

@GetMapping
@ResponseBody
public List<Integracao> convert(List<Object> object) {
    List<Integracao> list = new ArrayList<Integracao>();
    for(final Object o : object) {
        Object[] obj = (Object[]) o;
        list.add(new Integracao(obj[0].toString(),obj[1].toString()));
    }
    return list;
}

 }`

**Bank A Entity**

`package com.xxxxxx.xxxxxxxxxxxxx.entity.alu;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.math.BigDecimal;

@Entity
@NoArgsConstructor
@AllArgsConstructor
@Data
public class BANK A {
    @Id
private Long id;

@Column(name = "Caixa")
private String caixa;

@Column(name = "Embalador")
private String embalador;

@Column(name = "Operador")
private String operador;

@Column(name = "Empacotador")
private String empacotador;

@Column(name = "VALORFINAL")
private BigDecimal valor;

@Column(name = "VALOR")
private BigDecimal valor;

@Column(name = "TAXA")
private BigDecimal taxa;

@Column(name = "VENCIMENTO")
private Integer vencimento;

@Column(name = "Estoquista")
private String estoquista;

@Column(name = "Repositor")
private Integer repositor;

@Column(name = "Peixeiro")
private String peixeiro;

@Column(name = "MATRIZ")
private String matriz;

@Column(name = "Auxiliar")
private String auxiliar;

@Column(name = "TIPO")
private Integer tipo;

public Integracao(String toString, String toString1) {
}
  }`

 **Bank B Entity**

 `package com.xxxxxxx.xxxxxxxxxxxxxx.entity.integracao;

  import lombok.AllArgsConstructor;
  import lombok.Data;
  import lombok.NoArgsConstructor;
  import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.Id;
  import javax.persistence.Table;
  import java.math.BigDecimal;


 @Entity
 @NoArgsConstructor
 @AllArgsConstructor
 @Data
 @Table(name = "integracao" )
 public class Integracao {

@Id
private Long id;

@Column(name = "Caixa")
private String caixa;

@Column(name = "Embalador")
private String embalador;

@Column(name = "Operador")
private String operador;

@Column(name = "Empacotador")
private String empacotador;

@Column(name = "VALORFINAL")
private BigDecimal valor;

@Column(name = "VALOR")
private BigDecimal valor;

@Column(name = "TAXA")
private BigDecimal taxa;

@Column(name = "VENCIMENTO")
private Integer vencimento;

@Column(name = "Estoquista")
private String estoquista;

@Column(name = "Repositor")
private Integer repositor;

@Column(name = "Peixeiro")
private String peixeiro;

@Column(name = "MATRIZ")
private String matriz;

@Column(name = "Auxiliar")
private String auxiliar;

@Column(name = "TIPO")
private Integer tipo;

public Integracao(String toString, String toString1) {
}
 }`

**Bank A repository**

`package com.xxxxxxxx.xxxxxxxxxxxxxx.repository.alu;
 import org.springframework.data.jpa.repository.JpaRepository;
 import com.xxxxxxxxxxx.xxxxxxxxxxxxx.entity.alu.BancoA;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 import java.util.List;

 @Repository
 public interface xxxxxxxRepository extends JpaRepository<xxxxxxx,Long>{
 @Query(nativeQuery = true, value ="SELECT " +
        "    EMBALADOR," +
        "    OPERADOR," +
        "    EMPACOTADOR," +
        "    VALORFINAL," +
        "    VALOR," +
        "    VALOR," +
        "    TAXA," +
        "    VENCIMENTO," +
        "    ESTOQUISTA," +
        "    REPOSITOR," +
        "    PEIXEIRO," +
        "    MATRIZ," +
        "    AUXILIAR," +
        "    TIPO FROM SPR_SUPERMECADO" )  (Note * SPR_SUPERMECADO Would be the View that I want to   store in the table of bank B)
List<Object>projection();

}

` B 银行存储库

`package com.xxxxxxx.xxxxxxxxxxx.repository.integracao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.xxxxxxxxxx.xxxxxxxxxxxxx.entity.integracao.Integracao;

@Repository
public interface IntegracaoRepository extends JpaRepository<Integracao,Long>{

} ``

stack trace output:


`2023-02-22 16:57:29.969 ERROR 5640 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    :        Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No primary or single unique constructor found for interface java.util.List] with root cause

 java.lang.IllegalStateException: No primary or single unique constructor found for interface      java.util.List
at org.springframework.beans.BeanUtils.getResolvableConstructor(BeanUtils.java:267) ~[spring-beans-5.3.24.jar:5.3.24]
at    org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMetho  dProcessor.java:219) ~[spring-web-5.3.24.jar:5.3.24]
at   org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:85) ~[spring-webmvc-5.3.24.jar:5.3.24]

我遵循了本教程,但我不是

在 spring boot 2 中将结果集转换为模型

java spring-boot hibernate view firebird
© www.soinside.com 2019 - 2024. All rights reserved.