2012-06-11 2 views
0

안녕과 동일한 열 두 개의 필드,메핑는 EclipseLink의 API

나는 데이터베이스 테이블에 저장된 그래프를 나타내는 동적 개체를 만들 수 는 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)를 다른 테이블/엔티티의 같은 열/필드로 매핑하기 때문에이 예외가 발생합니다.

이 매핑 문제를 해결하기 위해 내가 무엇을 할 수 있는지 알고 있습니까? 다른 전략을 제안 하시겠습니까? 테이블 구조를 변경할 수 없으며 매핑 중 하나를 "읽기 전용"으로 만들고 싶지 않지만 동적 매핑을 자유롭게 변경할 수 있습니다.

감사합니다.

답변

1

문제는 "NODE_ID"필드를 startNode 및 endNode 매핑에서 외래 키로 사용한다는 오류 메시지가 표시되는 것과 같은 문제입니다. 본질적으로 객체의 startNode는 데이터베이스에서 다시 읽을 때 == endNode입니다. 두 노드가 서로 다른 노드를 참조하도록되어 있다면, 두 개의 매핑에 서로 다른 필드를 지정하여 자신의 외래 키를 사용하기를 원할 것입니다. 예 :

OneToOneMapping startNodeMapping = dynamicLinkTypeBuilder.addOneToOneMapping ("startNode", dynamicNodeTypeBuilder.getType(), "START_NODE_ID");
OneToOneMapping endNodeMapping = dynamicLinkTypeBuilder.addOneToOneMapping ("endNode", dynamicNodeTypeBuilder.getType(), "END_NODE_ID");

둘 다 자동으로 "NODE_ID"라고 가정하는 참조 된 테이블의 기본 키를 참조합니다.

+0

Link 테이블의 외래 키 이름 대신 Node 테이블에서 사용 된 열 이름을 사용하려고 했으므로 세부 사항을 간과했습니다. 내 코드에서 그 오류를 잡아 주셔서 감사합니다! –

관련 문제