我使用的是JPA 2.0。是否可以将实体的属性(列)映射到函数的结果,然后控制它的持续方式?
注意:这与PostGIS有关。由于JPA / EclipseLink中没有对Geometry类型的原生支持,我可能会这样做:
@Entity
public class Foo {
@Column(name="geom", appendBeforeChange( ST_FromKml ))
public String kmlString;
}
换句话说,我可以将几何体作为String存储在Java中,但是当EclipseLink将它写入数据库时,它应首先调用数据库函数ST_FromKml并提供String,它将把它转换为Geometry类型。数据库...
我知道这是一段时间,但我想我会问......
答案 0 :(得分:2)
我实际上在这篇帖子的帮助下找到了一个解决方法:
Are JPA (EclipseLink) custom types possible?
在Postgres中,我创建了一个从String到Geometry的隐式转换:
CREATE OR REPLACE FUNCTION geom_in_text(varchar) RETURNS geometry AS $$
SELECT ST_GeomFromText($1::varchar);
$$ LANGUAGE SQL IMMUTABLE;
CREATE CAST (varchar AS geometry) WITH FUNCTION geom_in_text(varchar) AS IMPLICIT;
现在在Java中,我只是将我的Entity成员变量保存为WKT格式的String。当Postgres看到INSERT时,它会识别可用的隐式演员而不是抱怨。
注意 - 我将WKT存储在我的Entity类中,但理论上我可以存储KML然后更新我的函数来调用ST_GeomFromKml而不是......