PostGISとEclipselinkでPostgreSQLを使用しています。 Postgresデータベースには、Postgresストアド関数で知っているように、ストアド関数がいくつかあります.Eclipselinkは@NamedStoredProcedureQueryアノテーション、StoredProcedureCall、およびStoredFunctionCallメソッドを使用できません。したがって、@ NamedNativeQueryを使用します。 私はPostgreSQL/PostGISストアドファンクション+ Eclipselinkコンバータの問題
em.persist(e);
私のエンティティを永続化するとき正常に動作GeometryConverterを、書いて、ここで
@NamedNativeQuery(name = "getEntity", query = "SELECT * FROM GET_ENTITY(?)", resultClass = Entity.class)
では私のGeometryConverterです:
public Geometry convertDataValueToObjectValue(Object dataValue, Session session) {
if (dataValue == null) {
return null;
} else if (dataValue instanceof PGgeometry) {
return ((PGgeometry) dataValue).getGeometry();
} else {
log.severe("dataValue not instance of PGgeometry");
return null;
}
}
@Override
public PGgeometry convertObjectValueToDataValue(Object objectValue, Session session) {
if (objectValue == null) {
return null;
// } else if (objectValue instanceof Geometry) {
// return new PGgeometry((Geometry)objectValue);
} else if (objectValue instanceof Point) {
return new PGgeometry((Point)objectValue);
} else if (objectValue instanceof MultiPoint) {
return new PGgeometry((MultiPoint)objectValue);
} else if (objectValue instanceof LineString) {
return new PGgeometry((LineString)objectValue);
} else if (objectValue instanceof MultiLineString) {
return new PGgeometry((MultiLineString)objectValue);
} else if (objectValue instanceof Polygon) {
return new PGgeometry((Polygon)objectValue);
} else if (objectValue instanceof MultiPolygon) {
return new PGgeometry((MultiPolygon)objectValue);
} else if (objectValue instanceof GeometryCollection) {
return new PGgeometry((GeometryCollection)objectValue);
} else {
log.severe("objectValue not instance of Geometry");
return new PGgeometry();
}
}
@Override
public void initialize(DatabaseMapping dm, Session session) {
dm.getField().setSqlType(java.sql.Types.OTHER);
}
しかし、私はこれを使用したいですストアドファンクション
@NamedNativeQuery(name = "getEntityGeom", query = "SELECT * FROM GET_ENTITY_GEOM(?)")
?パラメータは、PostGISの/ Postgresqlのgeometry
タイプで、それは次の例外がスローされます。
Internal Exception: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of org.postgis.MultiLineString. Use setObject() with an explicit Types value to specify the type to use.
私はコンバータはorg.postgis.PGgeometryにorg.postgis.MultiLineStringを変換していないことがわかります。私はコンバータを動作させるために何を設定すべきですか?
ありがとうございました! Tamas J
ありがとうございました! StructConverterとDataReadQueryが動作しないか、何か間違っていますが、幾何学の代わりにPGgeometryを使用すると動作します。 –