我无法将我的数据放入另一个来自另一个连接的表中。 我真的需要这方面的帮助,而我缺乏这方面的经验让我很受打击。在我当前的场景中,我与一个 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]
我遵循了本教程,但我不是