From: Michael B. <mi...@lu...> - 2006-04-30 03:14:19
|
On Apr 29, 2006, at 11:30 PM, Jody Garnett wrote: > Michael Brasser wrote: >> // should the ID be generated during an insert, we need to read it >> back >> // and set it into the feature >> >> So I was assuming that the purpose of createID was to retrieve the >> ID that was just generated? > We need to tag in a module maintainer on a JDBC datastore (like > justin), the actual datastore API will not give you a FeatureID you > can trust until after you have done a commit. > > I should ask what your workflow is that you are wanting a FeatureID > before you know if the features will be accepted by the datastore? > > Jody I am going by uDig's usage when a new feature is drawn using the edit tool. This creates and runs a CreateAndSetNewFeature command, which in turn creates and runs an AddFeatureCommand, which includes the line: fid=(String) resource.addFeatures(c).iterator().next(); This line eventually uses JDBCTextFeatureWriter and AutoIncrementFIDMapper from the Geotools package. The returned "fid" is later assigned to the EditGeom we are working with. One reason AutoIncrementFIDMapper looks strange to me is that its createID function seems so different from the other createID functions for the other mappers in the org.geotools.data.jdbc.fidmapper package. The main differences I see being: 1. AutoIncrementFIDMapper is the only mapper to return a null value for createID (as far as I can see). 2. AutoIncrementFIDMapper is the only mapper to return the same value every time it is used, regardless of the feature. In other words, if I were to add ten new features and were using AutoIncrementFIDMapper, the mapper would return id=null for all ten features. For all other mappers, if I were to add ten new features the mapper would return a unique id for each feature (using "SELECT MAX..", "new UID()", etc based on the specific mapper). Regards, Michael |