升级到 Neo4j v5.9.0 时,我尝试通过创建以下配置来强制执行 Neo4j v5 方言,如文档建议的那样
import org.neo4j.cypherdsl.core.renderer.Dialect
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.neo4j.cypherdsl.core.renderer.Configuration as CypherConfiguration
@Configuration
class Neo4jConfiguration {
@Bean
fun cypherDslConfiguration(): CypherConfiguration =
CypherConfiguration.newConfig().withDialect(Dialect.NEO4J_5).build()
}
从弹簧执行器检查时,似乎存在以下 bean
"cypherDslConfiguration": {
"aliases": [],
"scope": "singleton",
"type": "org.neo4j.cypherdsl.core.renderer.Configuration",
"resource": "class path resource [com/foo/infra/neo4j/Neo4jConfiguration.class]",
"dependencies": [
"neo4jConfiguration"
]
}
当使用存储库查询时,我仍然收到来自各种不同查询的以下警告
Neo.ClientNotification.Statement.FeatureDeprecationWarning: This feature is deprecated and will be removed in future versions.
UNWIND $__relationships__ AS relationship WITH relationship MATCH (startNode:`MyNode`) WHERE startNode.entityId = relationship.fromId MATCH (endNode) WHERE id(endNode) = relationship.toId MERGE (startNode)-[relProps:`BELONGS`]->(endNode) RETURN elementId(relProps) AS __elementId__
^
The query used a deprecated function: `id`.
节点上的
entityId
字段用 @Id
注释进行注释。
我还缺少一些配置吗?还是我的 cypherDslConfiguration bean 不正确?
相关版本:
请阅读此 Spring Data Neo4j 7.1 发行说明。
来自发行说明:
Neo4j 5 引入了新的、更通用的内部标识符, 跨多个共享 Neo4j 数据库安全工作。他们叫 元素 id 可以使用 Cypher 函数检索
。在此过程中,elementId(n)
Cypher 函数得到 已弃用。后者返回一个长值来标识节点和 关系。id(n)
我从他们的文档中理解的内容以要点的形式给出:
id()
函数用于返回 long 值。现在,由于 id()
函数已被弃用,因此将不再支持返回类型为 long类型的
id
字段。正确的数据模型应在
@Id
字段上包含 @GeneratedValue
和 id
。
例如:
@Node("model")
public class Model {
@Id
@GeneratedValue
private String entityId;
.......
}
请阅读上述文档以获取更多信息。