是否可以在使用JDBCDataStore插入新的SimpleFeature时跳过列?



在我们的应用程序(Java, Geotools 25, PostGIS)中,我们有一些表单,用户可以在其中输入一些将用于创建新功能的数据。在数据库(PostGIS)有更多的列比有字段,所以一些列将是空的。这些"空"列数据库中定义的默认值。然而,Geotools似乎总是为这些列插入null。

在代码中,我有一个SimpleFeatureStore,我根据用户输入创建一个SimpleFeature。当我插入新功能(store.addFeatures())时,由Geotools创建的最终SQL是一个INSERT INTO语句,其中包含所有列的null值,这些列不是"形式",但其中一些在DB中具有默认值。由于Geotools显式地将值设置为null,因此从未使用默认值。

是否有一个修复或解决方法,我可以尝试解决这个问题,所以我可以让DB插入默认值时没有提供值?

DataUtilities类提供了一个defaultValues(SimpleFeatureType )方法,您可以调用该方法来获取PropertyDescriptor中定义的值(尽管默认情况下该值为null)。您可以在您的SimpleFeatureType中定义任何或所有属性的默认值。

我将使用如下代码:
SimpleFeatureTypeBuilder sftb = new SimpleFeatureTypeBuilder();
sftb.setName("test");
sftb.add("id", Integer.class);
sftb.defaultValue("String");
sftb.add("desc", String.class);
SimpleFeatureType schema = sftb.buildFeatureType();
SimpleFeatureBuilder sfb = new SimpleFeatureBuilder(schema);
sfb.addAll(DataUtilities.defaultValues(schema));
sfb.set("id", 23);
SimpleFeature f = sfb.buildFeature("test.1");
System.out.println(f);

生成如下特征:

SimpleFeatureImpl:test=[SimpleFeatureImpl.Attribute: id<id id=test.1>=23,
SimpleFeatureImpl.Attribute: desc<desc id=test.1>=String]

相关内容

  • 没有找到相关文章

最新更新