Spring JPA 未保存到 Postgres DB

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

我正在尝试设置一个系统来从 Neo4J 数据库中提取数据并将其推送到 Postgres 数据库中。与 Neo4J 数据库的连接是长期存在的,而 Postgres 连接是新的。我可以很好地从 Postgres 数据库检索数据,但是当调用

save
saveAll
时,我看到没有实际推送的更新。我的(非常简单)服务类别如下:

public class RCAWorkflowService {

  private final RCAWorkflowRepository rcaWorkflowRepository;
  private final Neo4jClient neo4jClient;

  public Iterable<RCAWorkflow> findAll() {
    return rcaWorkflowRepository.findAll();
  }

  public void pushWorkflows() {
    var rcaWorkflows = neo4jClient.query("""{{CYPHER CODE TO PULL ENTITIES}}""")
        .fetchAs(RCAWorkflow.class)
        .mappedBy(RCAWorkflow::map)
        .all();
    rcaWorkflowRepository.saveAll(rcaWorkflows);
  }

  public void createWorkflow(String workflowId, String appId) {
    var wf = new RCAWorkflow(
        UUID.randomUUID(),
        workflowId,
        "localhost",
        "1.0",
        appId,
        "json!",
        new Date()
        );
    rcaWorkflowRepository.save(wf);
  }

}

Postgres 连接的配置如下:

@Configuration
@EnableJpaRepositories(basePackages = "package")
public class RCAPostgresConfig {

  @Bean
  public DataSource rcaDataSource() {
    var dataSource = new DriverManagerDataSource();
    dataSource.setUrl("url");
    dataSource.setUsername("username");
    dataSource.setPassword("password");

    return dataSource;
  }

  @Primary
  @Bean(name = "entityManagerFactory")
  public LocalContainerEntityManagerFactoryBean rcaEntityManager() {
    var em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(rcaDataSource());
    em.setPackagesToScan("package");
    em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());

    var properties = Map.of(
        "hibernate.hbm2ddl.auto", "none",
        "hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect",
        "hibernate.show-sql", "true"
    );
    em.setJpaPropertyMap(properties);

    return em;
  }

  @Bean
  public PlatformTransactionManager rcaTransactionManager() {
    var transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(rcaEntityManager().getObject());
    return transactionManager;
  }

}

存储库类没什么特别的——只是一个从

JpaRepository
扩展出来的接口,没有其他任何东西。

关于为什么能够通过

findAll
检索数据有什么想法,但我将数据推送到数据库的方法都不起作用?没有抛出任何异常,我什至尝试过只是在它抓住
某物
的机会时抛出一个try/catch块,但仍然什么也没有。它只是默默地实际上并不保存任何实体。

java spring postgresql spring-data-jpa
1个回答
0
投票

您是否尝试使您的服务方法具有事务性,以便让 ORM 管理提交?

@Transactional
public void createWorkflow(String workflowId, String appId) {
    var wf = new RCAWorkflow(
         UUID.randomUUID(), workflowId, "localhost", "1.0", appId, "json!", 
         new Date());
    rcaWorkflowRepository.save(wf);
}
© www.soinside.com 2019 - 2024. All rights reserved.