在SpringDataNeo44中,我们只有存储库。保存(实体)
,但例如,当我的UserEntity的属性(电子邮件)更改时,我不知道如何更新该属性。
我也尝试使用neo4j模板,但使用现有节点id保存实体会导致下面的回滚。
org.springframework.dao.InvalidDataAccessApiUsageException: New value must be a Set, was: class java.util.ArrayList; nested exception is java.lang.IllegalArgumentException: New value must be a Set, was: class java.util.ArrayList
at org.springframework.data.neo4j.support.Neo4jExceptionTranslator.translateExceptionIfPossible(Neo4jExceptionTranslator.java:43)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
如何更新节点或节点属性?
public void updateUserNode(UserEntity user) {
try{
UserEntity updatedUser = this.getUserByUserId(user.getUserId());//finding node with user id///
updatedUser.setEmail(user.getEmail());
updatedUser.setImageId(user.getImageId());
updatedUser.setFirstname(user.getFirstname());
updatedUser.setLastname(user.getLastname());
//System.out.println("Deleting ");
//userRepository.delete(del);
System.out.println("UPDATING ");
// with existing Id, you can not save it again/, or update
updatedUser = userRepository.save(updatedUser);
}catch(Exception e){
e.printStackTrace();
}
//return
}
因为您使用的是SDN,所以不需要手动启动/提交任何事务。
假设您的User
类如下所示
@NodeEntity(label="User)
public class User extends DomainObject{
@Property(name = "email")
private String email;
//getter and setter
}
并且您的UserRepository
类似于以下内容:
public interface UserRepository extends GraphRepository<User> {
//maybe this is already right at hand by SDN and thus redundant?
@Query("MATCH (u:User {email:{email}}")
public User findByEmail(@Param("email") String email)
}
然后您可以在UserService
类上使用@Transactional
:
@Component
@Transactional
public class UserService {
@Autowired
private UserRepository userRepository;
public void updateEmail(String email) {
User user = userRepository.findByEmail(email);
if (user == null) return; //or throw...
user.setEmail(email);
userRepository.save(user);
}
}
在您的UserEntity
域对象中,您是否存储了任何关系?确保它们被声明为Set
来自:http://static.springsource.org/spring-data/data-graph/snapshot-site/reference/html/#reference:programming_model:关系:相关
也可以有引用一组节点实体(1:N)的字段。这些字段有两种形式,可修改或只读。可修改字段的类型为set,只读字段的类型为Iterable,其中T是@NodeEntity注释类
我怀疑您的默认构造函数正在实例化ArrayList。。。
您必须在事务中嵌入。
作为一个例子:
final org.neo4j.graphdb.Transaction tx = this.neoTemplate.getGraphDatabaseService().beginTx();
try {
updatedUser = userRepository.save(updatedUser);
tx.success();
} finally {
tx.finish();
}
我正在使用Neo4j的最新Spring数据。在这个项目中,我有不同的组,它们可以通过url/group/{id}/project访问,该url/group/{id}/project应该返回用户有权访问的所有项目的列表。这东西工作得很好,但是如果用户输入了一个很大的数字作为groupId,而这个数字在数据库中并不存在,我会得到一个 组织。neo4j。图b。NotFoundException:未找到节
我使用的是Spring数据Neo4j 3.3。1.2与Neo4j服务器一起发布。3. 我的问题是有一些节点是我的实体的副本,但它只有索引属性。 我的班级看起来像这样 当一个新节点被创建时,我首先检查是否有一个现有的节点,如果它存在就更新它,否则创建一个新的节点。 存储库接口。 在Neo4j中,实体被创建到具有所有属性的节点。但是有些节点也有一个只包含productId的重复节点。问题是这并没有发生
SyntaxError:无效输入“h”:预期为“I/I”(第10行,第28列(偏移量:346))“merge(p:primaryconsumer),其中p.name=svc.name” 我100%确信这些名称是唯一的,并且将与现有节点集中的唯一使用者名称相匹配(有待观察)。 当唯一节点属性匹配时,如何将现有属性添加到新数据中?(我希望获得唯一的ID,但我必须能够在匹配上执行新数据的更新)
我在一个数据帧中有一个数据结构,它有3列:节点、父节点、前一个兄弟节点 我想创建完整数据结构的树文件夹,父节点和节点之间的级别不同,节点和previous_sibling之间的级别相同,兄弟节点之间的顺序正确。 因此,一个新的数据框、重新排序和一个新的列“级别” 当parent为null时,节点处于根级别当previous_sibling为null时这是第一个同级 下面是一个例子: 数据帧 应给出
我需要创建一个新的A类节点,它与User节点有关系: 现在,假设我们有新节点A的以下数据: 我试图创建节点A,使新节点A与具有“id”:4和“nodeId”:“0002-0002”(唯一节点标识符)的用户的(现有)节点之间具有关系,但用户节点将字段“name”和“firstName”更新为。 我正在使用GraphRespository代理创建它: 有没有办法不进行此更新,只与用户节点建立关系?
我的Firebase数据库映像在Firebase的实时数据库中,我正在尝试访问父节点的名称,并给出了子节点的名称。但是,.parent似乎需要对子节点的引用,如果没有父节点的名称,我似乎无法获得子节点的引用。 这是我的数据的代码: 问题出在like函数中:如果我能找到一种方法来获取发tweet(参数t表示的tweet)的人的userId,那么第一个var y和所有这些都是不必要的。 如果我可以得到