Насколько я знаю, Java 8 не имеет оптимизации хвостового вызова. Afaik это не связано с фактическим трюком компилятора, потому что это просто, но для сохранения вызова в целях безопасности. Но я предполагаю, что это возможно с перезаписью байт-кода.
MySql не может знать, как хранить объект GEO, или каков его размер. Вы не должны хранить объект так, как вы пытаетесь.
Документация PreparedStatement # setObject () гласит:
Спецификация JDBC указывает стандартное сопоставление типов объектов Java с типами SQL. Данный аргумент будет преобразован в соответствующий тип SQL перед отправкой в базу данных. [...] Этот метод генерирует исключение, если существует двусмысленность, например, если объект имеет класс, реализующий более одного из интерфейсов, названных выше.
blockquote>
Он также может быть двоичным, например
PreparedStatement preparedStatement = connection.prepareStatement
("INSERT INTO table (point, polygon) VALUES (PointFromWKB(?), GeomFromWKB(?))");
WKBWriter writer = new WKBWriter();
preparedStatement.setBytes(1, writer.write(point));
preparedStatement.setBytes(2, writer.write(polygon));
preparedStatement.executeUpdate();
geoobject.toText();
INSERT INTO geom VALUES (GeomFromText(@g));