我正在尝试设置一个系统来从 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
块,但仍然什么也没有。它只是默默地实际上并不保存任何实体。
您是否尝试使您的服务方法具有事务性,以便让 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);
}