Java Can';t使用JPA插入PGpoint类型

Java Can';t使用JPA插入PGpoint类型,java,postgresql,jpa,eclipselink,postgis,Java,Postgresql,Jpa,Eclipselink,Postgis,我正在尝试保留我的一个JPA/EclipseLink模型,类型为org.postgresql.geometric.PGpoint的一个属性location未正确插入 我的模型看起来像这样: @Entity @NamedQuery(name="Entity.findAll", query="SELECT * FROM Entity e") public class Entity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) p

我正在尝试保留我的一个JPA/EclipseLink模型,类型为org.postgresql.geometric.PGpoint的一个属性
location
未正确插入

我的模型看起来像这样:

@Entity
@NamedQuery(name="Entity.findAll", query="SELECT * FROM Entity e")
public class Entity {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name="name")
private String name;

@Column(name="location")
private PGpoint location;

@Column(name="date")
private Timestamp date;

@Column(name="user_id")
private Integer user_id;

/* getters and setters */
INSERT INTO ENTITY (name, location, date, user_id) 
VALUES ("my_name", [B26bf8d677, "2017-05-12 12:33:00.0", 1])
INSERT INTO ENTITY (name, location, date, user_id)
VALUES("my_name", "POINT(42,24)", "2017-05-12 12:33:00.0", 1)
我得到一个例外:

Internal Exception: org.postgresql.util.PSQLException: 
ERROR: column "location" is of type point but expression is of type bytea
我已经启用了查询日志记录,并确定问题似乎是由错误的SQL引起的。
location
后面的所有属性似乎都被分组到一个
bytea
数组中。具体而言,JPA正在尝试执行如下插入:

@Entity
@NamedQuery(name="Entity.findAll", query="SELECT * FROM Entity e")
public class Entity {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name="name")
private String name;

@Column(name="location")
private PGpoint location;

@Column(name="date")
private Timestamp date;

@Column(name="user_id")
private Integer user_id;

/* getters and setters */
INSERT INTO ENTITY (name, location, date, user_id) 
VALUES ("my_name", [B26bf8d677, "2017-05-12 12:33:00.0", 1])
INSERT INTO ENTITY (name, location, date, user_id)
VALUES("my_name", "POINT(42,24)", "2017-05-12 12:33:00.0", 1)
也就是说,它似乎试图将最后三个属性全部插入
location

我还尝试将
位置
存储为类型
字符串
,它适用于我的另一个模型,该模型只从数据库读取位置值,从不插入它们。这似乎解决了格式错误的SQL问题,因为插入内容如下所示:

@Entity
@NamedQuery(name="Entity.findAll", query="SELECT * FROM Entity e")
public class Entity {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name="name")
private String name;

@Column(name="location")
private PGpoint location;

@Column(name="date")
private Timestamp date;

@Column(name="user_id")
private Integer user_id;

/* getters and setters */
INSERT INTO ENTITY (name, location, date, user_id) 
VALUES ("my_name", [B26bf8d677, "2017-05-12 12:33:00.0", 1])
INSERT INTO ENTITY (name, location, date, user_id)
VALUES("my_name", "POINT(42,24)", "2017-05-12 12:33:00.0", 1)
但是,它实际上不起作用,因为我遇到了以下异常:

Internal Exception: org.postgresql.util.PSQLException: 
ERROR: column "location" is of type point but expression is of type character varying

如何才能正确插入
location
属性?

假设需要将
org.postgresql.geometric.PGpoint
映射到Hibernate类型。这可能会帮助你找到一份工作。此外,这还提供了一个替代解决方案。您的JPA提供商似乎无法即时处理该地理空间类型,因此您需要利用EclipseLink的类型映射功能(无论它们是什么)或使用JPA 2.1 AttributeConverter。@RajithPemabandu的评论似乎认为你在使用Hibernate,但你没有。看到帖子不断出现,哈哈。这是我自己的问题/答案(也是Rajith发布的第二个链接)。它实际上没有起作用,所以我删除了我对另一个问题的原始答案,但看起来它已经在这个网站上存档了