当前位置: 首页 > 知识库问答 >
问题:

Neo4j Spring Data NodeEntity使用String as@id

帅锦
2023-03-14

我试图使用java.lang.字符串作为NodeEntity的@Id。

 @NodeEntity(label = "MachineType")
 public class MachineType {
     @Id private String id;
     ....

根据Spring数据neo4j文档应该是可能的:

While an id is still required on all entities, the behavior has been
simplified by introducing the new @Id annotation. It replaces both
@GraphId and the primary attribute and can be placed on any attribute 
with a simple type.

当我尝试插入时,我得到一个:

{
    "cause": null,
    "message": "Id must be assignable to Serializable!: null"
}

这很奇怪,因为String实现了可序列化。有人知道下一步去哪里搜索吗?

共有1个答案

夏昌胤
2023-03-14

我认为你不能用其他任何东西作为身份证。请记住,如果您删除节点,此Long数字将被重复使用。

我使用UUID插件来生成真正的唯一密钥,当我使用sping-data-rest时,我使用BackendIdConzer将我公开的资源的id更改为uuid。

示例:型号:

@NodeEntity
@Data
public class Target {

    @Id @GeneratedValue Long id;   // <----Neo4j id 

    private String uuid;           // <----My Key

    @Version Long version;
    private List<String> labels = new ArrayList<>();
    @Relationship(type = "HAS_MEDIA", direction=Relationship.OUTGOING)
    private List<Gallery> media = new ArrayList<>();

}

将资源id转换为我的密钥:

@Component 
public class MovieIdConverter implements BackendIdConverter {
    @Autowired MovieRepo movieRepository;

    @Override
    public Serializable fromRequestId(String id, Class<?> entityType) {
        Movie movie = movieRepository.findByUuid(id);
        return  (Serializable) movie.getId();
    }

    @Override
    public String toRequestId(Serializable serializable, Class<?> aClass) {
        Long id = (Long) serializable;
        Optional<Movie> movie = movieRepository.findById(id);
        if (movie.isPresent()) return movie.get().getUuid();
        return null;
}

    @Override
    public boolean supports(Class<?> aClass) {
        return Movie.class.equals(aClass);
    }
}
 类似资料:
  • 问题内容: 我是c3op的新手,对使用感到困惑: 在此链接中:如何配置C3P0连接池 这种测试(空闲,池连接)的目的是什么,以及c3p0.idle_test_period和c3p0.timeout之间的关系? 问题答案: 在一定时间后,数据库服务器可能会在其一侧关闭连接-导致您的应用程序出现错误,因为它会尝试在服务器端不再可用的连接上发送查询。 为了避免这种情况,您可以让池定期检查连接的有效性(请

  • 有没有办法在使用 jongo 查询 MongoDB 时添加 ?我发现这样的错误 - '排序超出了 104857600 字节的内存限制,但没有选择加入外部排序。正在中止操作。传递 allowDiskUse:true 可以选择加入,可以通过以下方式阻止,您的聚合看起来像 但据我所知,Jongo 中的类仅将管道应用于自身,然后您可以使用 方法执行。 是否有任何方法可以将该参数传递给mongo而不从Jon

  • 我对使用servlet和JSP相当陌生,我正在尝试获取一个列出所有用户的JSP页面,根据用户id重定向到编辑表单JSP,列出所有用户的JSP页面使用迭代器显示我的JDBC表中的数据,但我似乎不知道如何分别为每个用户的编辑链接分配一个值,以便它可以用该用户的数据加载编辑表单,谢谢你的帮助。 这里我当前的jsp页面代码列出所有学生 然后,id值应该分配给servlet中的一个值,该值用于在调用编辑时从

  • 问题内容: 我在远程服务器上有一个管理Web应用程序。该应用程序是使用MEAN堆栈编写的,我列出了连接到Web应用程序所需的所有RESTful路由。 我正在编写一个Java客户端应用程序,该应用程序需要从该管理应用程序发送和接收数据。如果我具有服务器的IP地址和REST路由,如何将客户端连接到Web应用程序? 我想我需要提供到服务器和REST API文件的URL连接,然后仅调用诸如和的路由功能。

  • 问题内容: 我使用spring数据和方法来获取模型。调用此方法时如何使用查询提示? 上面的源代码工作正常,但是我不能为我的JPA提供程序(在我的情况下为EclipseLink)设置QueryHint。 以上是我使用spring-data使用查询提示的方式, 我还发现了这个尚未解决的问题。 问题答案: 当我想使用spring-data创建查询时,请遵循上述算法。 1)是否已经提供的查询 通过弹簧数据

  • 我使用spring数据和方法获取模型。调用此方法时如何使用查询提示 上面的源代码运行良好,但我无法为我的JPA提供者(在我的例子中是EclipseLink)设置QueryHint。 我使用spring数据使用查询提示的方式如下:, 我也发现这个还没有解决。

  • 通过io的requestAbs方法调用/调用/使用REST API的vertx实现。vertx。果心http。vertx-core-3.2.0中的HttpClient类。jar导致HTTP错误::302,响应数据为HTML Erro响应。 不确定requestAbs方法的行为,因为没有引发异常,也没有写入任何日志。此外,还随附了使用vertx JAR的此方法的源代码。如果方法实现有bug,是否有问

  • 问题内容: 说我有: 我该如何使用表单外部的“提交”按钮提交该表单,我认为在HTML5中有一个“提交”的动作属性,但是我不确定那是否是完全跨浏览器的,如果不是这样的话,做这个? 问题答案: 一个对我来说很好的解决方案,在这里仍然缺少。它需要具有目视隐藏或元件whithin的,和相关的它元件外部。它看起来像这样: 现在,此链接使您可以通过单击元素来“单击”表单元素。