使用带有Neo4j的Spring组件时无法保存自动装配的属性。
我已经定义了一个抽象的实体类,其中包含图形ID:
@NodeEntity
public abstract class DBEntity {
@GraphId private Long id;
}
有一个数据模型,父项和子项都定义为Spring组件。 我在这里简化了数据模型,实际上它是一个有几个子节点和级别的树:
@Component("DataModel")
@Scope("prototype")
public class DataModel extends DBEntity {
@Autowired private DataStructure dataStructure;
public TestDataStructure testDataStructure;
}
@Component("DataStructure")
@Scope("prototype")
public class DataStructure extends DBEntity {
...
}
出于测试目的,我还定义了一个没有Spring注释的测试数据结构:
public class TestDataStructure extends DBEntity {
private String test;
public TestDataStructure() {
this.test = "test";
}
}
以下是我的存储库和数据库服务实现的定义:
@Repository
public interface DataModelRepository extends GraphRepository<DBEntity> {
DBEntity save(DBEntity entity);
}
public class DatabaseServiceImpl implements DatabaseService {
@Autowired private DataModelRepository modelRepository;
public void putModel(DBEntity entity) {
modelRepository.save(Entity);
}
}
现在,当我使用Spring管理的DataModel实例调用putModel时,它将保存 DataModel实例以及TestDataStructure的实例作为具有1:1关系的节点。 DataStructure的实例以及与DataModel实例的关系将不会被保存,尽管它在程序中不为null。
如何保存整个DataModel? Spring可能会干扰Neo4j映射。我不确定,为什么自动装配的属性可能会在克隆过程中丢失,或者Neo4j用于获取数据。也许有人可以对此有所了解?