Java 如何将一个实体映射到两个数据库(MongoDb和Neo4j),每个数据库中都有自定义属性

Java 如何将一个实体映射到两个数据库(MongoDb和Neo4j),每个数据库中都有自定义属性,java,mongodb,spring-boot,neo4j,Java,Mongodb,Spring Boot,Neo4j,我有一个用户实体,我想保存在两个数据库中,一个在MongoDb中,一个在Neo4j中: @Node("User") @Document public class User { @Id @GeneratedValue(UUIDStringGenerator.class) @org.springframework.data.annotation.Id private String id; //some other fields private Set<

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

@Node("User")
@Document
public class User {
  @Id
  @GeneratedValue(UUIDStringGenerator.class)
  @org.springframework.data.annotation.Id
  private String id;
  //some other fields
  private Set<SomeObject> objects = new HashSet<>();
  //getters and setters
}
@节点(“用户”)
@文件
公共类用户{
@身份证
@GeneratedValue(UUIDStringGenerator.class)
@org.springframework.data.annotation.Id
私有字符串id;
//其他一些领域
private Set objects=new HashSet();
//接球手和接球手
}
以下是我对这两个数据库的依赖关系:

        <dependency>
            <groupId>org.neo4j.springframework.data</groupId>
            <artifactId>spring-data-neo4j-rx-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

org.neo4j.springframework.data
spring-data-neo4j-rx-spring-boot-starter
org.springframework.boot
spring启动程序数据mongodb
现在想象一下,我希望将对象集保存在MongoDb中,而不是保存在Neo4j数据库中。如果我将其标记为@Transient,则不会保存在其中任何一个中。有什么方法可以做到这一点吗?

很久以前(大约在Spring Data Neo4j 3之前)就有一些对这种场景的支持,但是要正确地支持它似乎非常复杂,这就是为什么不再有对部分实体的内置支持

例如,如果实体的一部分已正确持久化(到数据存储a),而另一部分未正确持久化(到数据存储B),如何回滚事务?如果回滚失败怎么办

如果您仍然想沿着这条路线走下去,我认为您需要明确使用
Neo4jTransactionManager
MongoTransactionManager
(或其反应式变体),并依赖或类似方法来协调单独的事务


对于您的实体,我假设离开Spring数据共享注释并使用特定于数据存储的注释是可行的。

Spring-Data-neo4j是否在您的依赖项中?否。只有Spring-Data-neo4j-rx。Spring数据neo4j rx(-repo已存档)已被Spring数据neo4j 6()替换。你应该升级。