无法使用JPA插入PGpoint类型

时间:2017-05-12 23:27:04

标签: java postgresql jpa eclipselink postgis

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

我的模型看起来像这样:

@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 */

我得到了这个例外:

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

我启用了查询日志记录,并确定问题似乎是由格式错误的SQL引起的。 location后面的所有属性似乎都组合在一起成为bytea数组。具体来说,JPA正在尝试执行这样的插入:

INSERT INTO ENTITY (name, location, date, user_id) 
VALUES ("my_name", [B26bf8d677, "2017-05-12 12:33:00.0", 1])

也就是说,它似乎试图将最后三个属性全部插入location列。

我还尝试将location存储为String类型,它适用于我的其他模型之一,它只读取数据库中的位置值并且永远不会插入它们。这似乎解决了格式错误的SQL问题,因为插入内容如下所示:

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属性?

0 个答案:

没有答案