Hi Andrus, > > 1. Custom functions (already on master - [1]) > 2. Joins that are not equi-joins (spatial joins [2] in our case - > ST_Intersects/ST_Contains/etc). > > @Nikita - anything else I might have missed?
Essentially that's it for now. Here are links to related JIRA tasks: https://issues.apache.org/jira/browse/CAY-2512 https://issues.apache.org/jira/browse/CAY-2526 https://issues.apache.org/jira/browse/CAY-2529 https://issues.apache.org/jira/browse/CAY-2528 On Sat, Feb 23, 2019 at 5:38 PM Andrus Adamchik <and...@objectstyle.org> wrote: > > Hi Tore, > > Thanks for sharing your solutions. > > > Next up is PostGIS queries. PostGIS queries are very powerful, but the > > syntax can be quite strange. SQLTemplate or something similar should work > > fine. I have some simple application specific java abstraction to the most > > common stuff like ST_Intersects to fetch rows matching a tile and such. > > This is primarily the area where we think we might improve Cayenne > abstractions for both spatial and non-spatial advanced SQL. We'd like to add > the ability for object queries / mapping to contain the following: > > 1. Custom functions (already on master - [1]) > 2. Joins that are not equi-joins (spatial joins [2] in our case - > ST_Intersects/ST_Contains/etc). > > @Nikita - anything else I might have missed? > > None of the above appears to break the basic ORM assumptions, just taking > them to the next level. So hopefully it won't create leaky abstractions. > > Andrus > > [1] https://issues.apache.org/jira/browse/CAY-2512 > [2] http://postgis.net/workshops/postgis-intro/joins.html > > > > > > On Feb 23, 2019, at 1:40 AM, Tore Halset <hal...@pvv.ntnu.no> wrote: > > > > Hello. > > > > With Cayenne, you can easily create a ExtendedType that convert JTS > > geometries on the java side to Well-Known Binary on the database side. I > > did create a similar ExtendedType to create JTS geometries to Well-Known > > Text for storing JTS geometries as text (se below). We have used this in > > production for several years. For PostGIS, I have not used Cayenne on the > > geometries, but it should work identical. > > > > A long time ago, I wrote about this over at > > http://objectstyle.org/confluence/display/CAY/Mapping+JTS+Geometries , but > > that website does not exist anymore. > > > > Next up is PostGIS queries. PostGIS queries are very powerful, but the > > syntax can be quite strange. SQLTemplate or something similar should work > > fine. I have some simple application specific java abstraction to the most > > common stuff like ST_Intersects to fetch rows matching a tile and such. > > > > For related libraries, JTS has lots of geometry goodies. It is in the > > middle of a move with package name switch. The old one from vividsolutions > > is most compatible with other libraries for now. Geotools has lots of > > goodies for projection and such. And perhaps our library, > > https://github.com/ElectronicChartCentre/java-vector-tile , for > > constructing Mapbox Vector Tiles from java for use in Mapbox GL JS or > > Native. > > > > Regards, > > Tore Halset. > > > > /** > > * An ExtendedType that can be used by cayenne to covert WKT to/from JTS > > * Geometry - com.vividsolutions.jts.geom.Geometry > > */ > > public class WKTGeometryType implements ExtendedType { > > > > private static final String CHARSET = "UTF-8"; > > > > private Class<? extends Geometry> geometryClass; > > > > public WKTGeometryType(Class<? extends Geometry> geometryClass) { > > this.geometryClass = geometryClass; > > } > > > > public String getClassName() { > > return geometryClass.getName(); > > } > > > > public boolean validateProperty(Object source, String property, Object > > value, > > DbAttribute dbAttribute, ValidationResult validationResult) { > > Geometry g = (Geometry) value; > > if (!g.isValid()) { > > String msg = "Invalid geometry"; > > validationResult.addFailure(new BeanValidationFailure(source, > > property, msg)); > > return false; > > } > > return true; > > } > > > > public void setJdbcObject(PreparedStatement statement, Object value, int > > pos, int type, > > int precision) throws Exception { > > Geometry g = (Geometry) value; > > switch (type) { > > case Types.BLOB: > > statement.setBytes(pos, g.toText().getBytes(CHARSET)); > > break; > > default: > > statement.setString(pos, g.toText()); > > break; > > } > > } > > > > public Object materializeObject(ResultSet rs, int index, int type) > > throws Exception { > > String wkt = null; > > switch (type) { > > case Types.BLOB: > > wkt = new String(rs.getBytes(index), CHARSET); > > break; > > default: > > wkt = rs.getString(index); > > break; > > } > > if (wkt == null) { > > return (Geometry) null; > > } > > return new WKTReader(new GeometryFactory()).read(wkt); > > } > > > > public Object materializeObject(CallableStatement rs, int index, int > > type) throws Exception { > > String wkt = null; > > switch (type) { > > case Types.BLOB: > > wkt = new String(rs.getBytes(index), CHARSET); > > break; > > default: > > wkt = rs.getString(index); > > break; > > } > > if (wkt == null) { > > return (Geometry) null; > > } > > return new WKTReader(new GeometryFactory()).read(wkt); > > } > > > > } > > > >> On 21 Jan 2019, at 08:11, Nikita Timofeev <ntimof...@objectstyle.com> > >> wrote: > >> > >> Hi All, > >> > >> I had an interesting discussion with my colleagues who use PostGIS and > >> they are really interested in better support from Cayenne. Well, > >> actually they can’t use Cayenne on that project, as it will be like > >> using just raw SQL. > >> > >> So I was wondering if anyone else actively uses spacial features and > >> can help to determine missing parts in Cayenne. Maybe we can push this > >> forward and get some really nice cayenne-spacial module. > >> > >> Any feedback is welcome. > >> > >> -- > >> Best regards, > >> Nikita Timofeev > >> > > > -- Best regards, Nikita Timofeev