我有一个用户实体,我想保存在两个数据库中,一个在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
}
这是我对这两个数据库的依赖关系:
<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>
现在想象一下,我希望将对象集保存在mongodb中,而不是neo4j数据库中。如果我把这个标记为@transient,它不会保存在任何一个文件中。有什么办法吗?
1条答案
按热度按时间fcipmucu1#
很久以前(在spring数据neo4j3前后)曾经有一些对这种场景的支持,但是要正确地支持它似乎非常复杂,这就是为什么不再有对部分实体的内置支持。
例如,如果实体的一部分被正确地持久化(到数据存储a),而另一部分没有(到数据存储b),如何回滚事务?如果回滚失败怎么办?
如果你还想走这条路,我认为你需要明确使用
Neo4jTransactionManager
以及MongoTransactionManager
(或其React性变体)并依赖jta或类似工具来协调单独的事务。对于您的实体,我假设离开springdatacommons注解并使用特定于数据存储的注解是可行的。