java—如何将一个实体Map到两个数据库(mongodb和neo4j),每个数据库中都有自定义属性

xkftehaa  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(317)

我有一个用户实体,我想保存在两个数据库中,一个在mongodb中,一个在neo4j中:

  1. @Node("User")
  2. @Document
  3. public class User {
  4. @Id
  5. @GeneratedValue(UUIDStringGenerator.class)
  6. @org.springframework.data.annotation.Id
  7. private String id;
  8. //some other fields
  9. private Set<SomeObject> objects = new HashSet<>();
  10. //getters and setters
  11. }

这是我对这两个数据库的依赖关系:

  1. <dependency>
  2. <groupId>org.neo4j.springframework.data</groupId>
  3. <artifactId>spring-data-neo4j-rx-spring-boot-starter</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  8. </dependency>

现在想象一下,我希望将对象集保存在mongodb中,而不是neo4j数据库中。如果我把这个标记为@transient,它不会保存在任何一个文件中。有什么办法吗?

fcipmucu

fcipmucu1#

很久以前(在spring数据neo4j3前后)曾经有一些对这种场景的支持,但是要正确地支持它似乎非常复杂,这就是为什么不再有对部分实体的内置支持。
例如,如果实体的一部分被正确地持久化(到数据存储a),而另一部分没有(到数据存储b),如何回滚事务?如果回滚失败怎么办?
如果你还想走这条路,我认为你需要明确使用 Neo4jTransactionManager 以及 MongoTransactionManager (或其React性变体)并依赖jta或类似工具来协调单独的事务。
对于您的实体,我假设离开springdatacommons注解并使用特定于数据存储的注解是可行的。

相关问题