我正在使用spring-data-neo4j(当前版本)开发一个项目,当我尝试将两个类及其属性合并到一个NodeEntity时,我遇到了一个问题。这是我的两个班级:
@NodeEntity(label = "entity")
public class Ent1 {
@Id
@Index(unique = true)
private Integer id;
private Integer data1;
}
.
@NodeEntity(label = "entity")
public class Ent2 {
@Id
@Index(unique = true)
private Integer id;
private Integer data2;
}
通过定义用@Index注释的id属性,SDN正在进行合并,而不是插入具有相同索引的多个节点。
我想要实现的是,如果我保存Ent1的实例,然后另一个具有与Ent1实体相同id的Ent2实例,则结果节点中应该存在两个数据属性。他们应该合并。
事实上,data1或data2存在,取决于最后保存的实体。合并似乎并不真正合并,而是取代了实体属性。
有没有人有合并所有属性字段而不是替换/删除它们的解决方案?
我刚用自定义密码查询解决了我的问题。如果有人也面临这样的问题,这里是上面问题抽象的解决方案。
@Query("MERGE (e:entity{id:{ent1}.id}) SET e.data1 = {ent1}.data1"
void saveEnt1(@Param("ent1") Ent1 ent1);
@Query("MERGE (e:entity{id:{ent2}.id}) SET e.data2 = {ent2}.data2"
void saveEnt2(@Param("ent2") Ent2 ent2);
不幸的是,SDN本身并没有对实体合并使用这样的查询。