문제

GeoTools WFS-T 플러그인을 사용하면 새 행을 만들었고 커밋 한 후에는 FeatureID WHOS. getID () 이와 같이 보입니다.

newmy_database:my_table.9223372036854775807
.

"my_database"의 시작 부분에 "new"라는 단어가 놀라움이 아니라는 숫자는 새로운 행의 기본 키 (이 경우 "23"인 "23")의 기본 키를 반영하지 않습니다. 충분히 공정 해, 나는 이것이 내부 번호 매기기 시스템 일 수 있다고 생각했다. 그러나 이제는 다른 테이블의 외래 키를 원 하고이 새 행의 기본 키를 얻으려면이 FID에서 값을 얻는 방법을 모르겠습니다. 일부 장소는 다음과 같이 쿼리에서 FID를 사용할 수 있음을 제안합니다.

Filter filter = filterFactory.id(Collections.singleton(fid));
Query query = new Query(tableName, filter);
SimpleFeatureCollection features = simpleFeatureSource.getFeatures(query);
.

그러나 이것은 모든 장소의 밑줄에서 FID를 파싱 할 때 실패합니다! 행이 작성된 경우 (my_database : my_table "을 통과해야 할 테이블로 행이 생성 될 때 밑줄이 생성되었습니다.

ID가 잘못된 것이 있거나 어떻게 든 사용하고 있습니다. 아무도 어떤 빛을 흘릴 수 있습니까?

도움이 되었습니까?

해결책

몇 가지 일이 잘못되어있는 것처럼 보입니다. 그리고 아마도 버그 보고서가 필요합니다.

처음에는 "new"를 사용하는 featureID는 임시 ID입니다.Commit가 호출되면 실제 결과로 대체되어야합니다.

이를 알 수있는 방법이 있습니다 :

1) BatchFeateEvent를 듣게 될 수 있습니다.이것은 "TEMP ID"-> "WFS ID"에 대한 정보를 제공합니다.

2) 내부적 으로이 정보는 WFS에서 반환 된 거래 결과에서 구문 분석됩니다.결과는 WFStransActionState에 액세스 할 수 있습니다.이것은 BatchFeaTureevent가 발명되기 전에

Transaction transaction = new transaction("insert");
try {
     SimpleFeatureStore featureStore =
           (SimpleFeatureStore) wfs.getFeatureSource( typeName );
     featureStore.setTransaction( transaction );
     featureStore.addFeatures( DataUtilities.collection( feature ) );

     transaction.commit();

     // get the final feature id
     WFSTransactionState wfsts = (WFSTransactionState) transaction.getState(wfs);

     // In this example there is only one fid. Get it.
     String result = wfsts.getFids( typeName )[0];
}
finally {
     transaction.close();
}         
.

위의 예제와 함께 설명서를 업데이트했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top