2015-07-19 147 views
0

我使用的是Spring Data Neo4J 3.3.1,我很难更新节点。我有一些代码等同于这一点,它具有对数据库的零影响:为什么我修改后的neo4j节点属性没有保存到数据库?

@Transactional 
public void editTitle(Long nodeId, String newTitle) { 
    MyNode existingNode = nodeRepository.findOne(nodeId); 
    existingNode.getSubObject().setTitle(newTitle); 
    nodeRepository.save(existingNode); 
} 

这是MYNODE类:

@NodeEntity 
public class MyNode { 

    @Fetch 
    @RelatedTo(type="LINKED_TO", direction = Direction.OUTGOING) 
    private SubObject subObject; 

    public SubObject getSubObject() { 
     return subObject; 
    } 
} 

这是子对象类:

@NodeEntity 
public class SubObject { 

    private String title; 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 
} 

我我能够保存MyNode类型的新节点而没有问题。我只需拨打nodeRepository.save(newNode);即可将MyNode和SubObject一次保存到数据库中。

我已确认交易正在提交。我一直沿着调用堆栈向下到NeoStoreTransaction类,并观察executeModified方法处理命令,但我更改的字段没有在那里表示。

回答

1

进行编辑,您将需要显式地保存相关节点:

@Transactional 
public void editTitle(Long nodeId, String newTitle) { 
    MyNode existingNode = nodeRepository.findOne(nodeId); 
    existingNode.getSubObject().setTitle(newTitle); 
    subObjectRepository.save(existingNode.getSubObject()); 
    nodeRepository.save(existingNode); 
} 

这是因为保存相关的节点不同,这取决于他们是否已经被保存到数据库操作对待。

  • 对于相关节点尚未保存的情况,相关节点将自动保存。
  • 对于相关节点已被保留的情况,例如,当您稍后再回来编辑时,相关节点上属性的更改将不会被拾取。
相关问题