Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j OGM/Spring-Data-Neo4j:将属性类型从整数迁移到字符串_Neo4j_Spring Data_Spring Data Neo4j_Spring Data Neo4j 4_Neo4j Ogm - Fatal编程技术网

Neo4j OGM/Spring-Data-Neo4j:将属性类型从整数迁移到字符串

Neo4j OGM/Spring-Data-Neo4j:将属性类型从整数迁移到字符串,neo4j,spring-data,spring-data-neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Spring Data,Spring Data Neo4j,Spring Data Neo4j 4,Neo4j Ogm,在大型数据库中,我必须将节点类型的属性的数据类型从整数更改为字符串(即从42更改为“42”),以便还支持非数字ID 我已经成功地完成了这个操作,属性现在在数据库中具有预期的类型。 我已经使用Neo4j浏览器将查询结果显示为JSON的功能验证了这一点: "graph": { "nodes": [ { "id": "4190", "labels": [ "MyEntity"

在大型数据库中,我必须将节点类型的属性的数据类型从整数更改为字符串(即从42更改为“42”),以便还支持非数字ID

我已经成功地完成了这个操作,属性现在在数据库中具有预期的类型。 我已经使用Neo4j浏览器将查询结果显示为JSON的功能验证了这一点:

"graph": {
    "nodes": [
        {
            "id": "4190",
            "labels": [
                "MyEntity"
                ],
            "properties": {
                "id": "225"
            }
        }
    }
请注意,“id”属性不同于节点自己的(数字)id

在相应的Spring-Data-neo4j4app中,我也将相应属性的类型从Integer调整为String。我认为这已经足够了,但是在第一次加载受影响的实体时,我现在收到:

org.neo4j.ogm.exception.MappingException: Error mapping GraphModel to instance of com.example.MyEntity
[...]
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: Can not set java.lang.String field de.moneysoft.core.model.base.UriEntity.transfermarktId to java.lang.Integer
    at org.neo4j.ogm.entity.io.FieldWriter.write(FieldWriter.java:43)
    at org.neo4j.ogm.entity.io.FieldWriter.write(FieldWriter.java:68)
    at org.neo4j.ogm.context.GraphEntityMapper.writeProperty(GraphEntityMapper.java:232)
    at org.neo4j.ogm.context.GraphEntityMapper.setProperties(GraphEntityMapper.java:184)
    at org.neo4j.ogm.context.GraphEntityMapper.mapNodes(GraphEntityMapper.java:151)
    at org.neo4j.ogm.context.GraphEntityMapper.mapEntities(GraphEntityMapper.java:135)
    ... 122 common frames omitted
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.String field com.example.MyEntity.id to java.lang.Integer
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
    at java.lang.reflect.Field.set(Field.java:764)
    at org.neo4j.ogm.entity.io.FieldWriter.write(FieldWriter.java:41)
    ... 127 common frames omitted
我不知道Neo4j OGM存储了任何类型的模型或数据类型(至少我在图中没有看到)。为什么它仍然相信我的属性是一个整数

编辑: 迁移后的节点实体:

@NodeEntity
public class MyEntity
{
    @Property
    protected String name;
    @Property
    private String id;
}

我不知道还有其他相关的代码。

好吧,如果你看到的错误看起来不可信,很可能是。 睡了一个好觉之后,我意识到我连接到了错误的数据库实例:不是我在浏览器中看到的迁移的数据库实例,而是另一个包含未迁移状态的数据库实例


连接到正确的实例后,一切正常

你能给我们看一下代码,包括NodeEntity定义吗?@cybersam为NodeEntity添加了代码。还有什么可能相关的吗?