jooq:如何处理POINT MySQL数据类型

时间:2014-03-02 20:22:30

标签: mysql jooq

我在MySQL中有以下表格

CREATE TABLE `place` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(255) DEFAULT NULL,
  `STREET_NUMBER` int(11) DEFAULT NULL,
  `ROUTE` varchar(255) DEFAULT NULL,
  `LOCALITY` varchar(255) DEFAULT NULL,
  `ADM_AREA_L1` varchar(255) DEFAULT NULL,
  `ADM_AREA_L2` varchar(255) DEFAULT NULL,
  `COUNTRY` varchar(100) DEFAULT NULL,
  `POSTAL_CODE` varchar(10) DEFAULT NULL,
  `FORMATTED_ADDRESS` varchar(1000) DEFAULT NULL,
  `LOCATION` point DEFAULT NULL,
  `CLOSING_TIME` time DEFAULT NULL,
  `CREATION_DATE` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

它有一个POINT类型的字段,用于对该字段进行地理定位查询。 jooq生成的Pojo如下:

public class Place implements java.io.Serializable {
    private static final long serialVersionUID = -1847682719;

    private java.lang.Long     id;
    private java.lang.String   name;
    private java.lang.Integer  streetNumber;
    private java.lang.String   route;
    private java.lang.String   locality;
    private java.lang.String   admAreaL1;
    private java.lang.String   admAreaL2;
    private java.lang.String   country;
    private java.lang.String   postalCode;
    private java.lang.String   formattedAddress;
    private java.lang.Object   location;
    private java.sql.Time      closingTime;

    // getters and setters
}

这是我想要执行的查询类型:

  • 插入新记录。 POINT数据类型的sql为:

    INSERT INTO PLACE(LOCATION) VALUES(POINT(1,1));
    
  • 从POINT数据类型获取纬度和经度。 sql将是:

    SELECT X(LOCATION), Y(LOCATION) FROM PLACE;
    
  • 使用距离范围查询地点。 sql将是:

    SELECT *
    FROM PLACE
    WHERE ST_WITHIN(LOCATION, ENVELOPE(LINESTIRNG(
    POINT(@lon - @distance / abs(cos(radians(@lat)) * 69), @lat - (@distance / 69)),
    POINT(@lon + @distance / abs(cos(radians(@lat)) * 69), @lat + (@distance / 69))
    )))
    ORDER BY ST_DISTANCE(POINT(<lon>, <lat>), LOCATION);
    

我是否必须为每种情况创建CustomField(插入,获取纬度和经度,按距离范围查询,按距离排序)?

如果要创建CustomFieldCustomField什么?因为LOCATION表中jooq生成的Place字段属于DataType<Object>类型。

我尝试执行设置LOCATION字段的插入,但由于execute()的{​​{1}}方法未定义,因此无法编译。

1 个答案:

答案 0 :(得分:0)

jOOQ 3.3尚不支持各种SQL方言的空间/ GIS扩展。与此相关的问题是#982