你好,
我正在使用EclipseLink API创建动态实体来表示存储在数据库表中的图形。链接存储在自己的表中,其中包含链接 ID 列、开始节点 ID 和结束节点 ID 列,以及其他用户定义的列。节点有自己的表,其中存储了节点 ID 以及其他用户定义的列。
在进行从链接表到节点表的映射时,我使用 API 执行此操作:
OneToOneMapping startNodeMapping = dynamicLinkTypeBuilder.addOneToOneMapping("startNode", dynamicNodeTypeBuilder.getType(), "NODE_ID");
OneToOneMapping endNodeMapping = dynamicLinkTypeBuilder.addOneToOneMapping("endNode", dynamicNodeTypeBuilder.getType(), "NODE_ID");
运行前面的代码时,我在堆栈跟踪中收到以下消息:
Local Exception Stack: Exception [EclipseLink-48] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Multiple writable mappings exist for the field [TEST_NETWORK_LINK.NODE_ID]. Only one may be defined as writable, all others must be specified read-only.
Mapping: org.eclipse.persistence.mappings.OneToOneMapping[startNodeId]
抛出此异常是因为我将两个字段(startNode 和 endNode)从同一实体映射到不同表/实体中的同一列/字段。
你知道我能做些什么来解决这个映射问题吗?你会建议不同的策略吗?我无法更改表结构,也不想将其中一个映射设为“只读”,但我可以随意更改动态映射。
谢谢!