我在JPA查询具有几何类型列的MySQL表时遇到问题。它包含具有纬度和经度集作为坐标的多边形。在执行nativequery以从表中进行选择时,我收到以下错误
Exception Description: The primary key read from the row [ArrayRecord(
=> POLYGON((102.642944444444 2.9757087270706,102.642944444444 2.79805447470818,....
=> 16.0
=> 325990)] during the execution of the query was detected to be null. Primary keys must not contain null.
但是,该表没有主键为null的行。此特定行具有非常大的多边形,具有66个坐标。不确定问题是否是因为这个原因。
以下是表列名称和类型
geomarea - geometry
riskvalue - double
id - int (Autoincrement, Primary Key)
以下是我的EJB中用于读取表的代码。
Query query = em.createNativeQuery("select astext(geomarea) geomarea,riskvalue,id from earthquakeRisk where Contains(geomarea,GeomFromText('POINT(" + node.getLongitude() + " "+node.getLatitude()+")'))",Earthquakerisk.class);
geomList.addAll(query.getResultList());
以下是字段在实体类中的声明方式
public class Earthquakerisk implements Serializable {
private static final long serialVersionUID = 1L;
@Basic(optional = false)
@NotNull
@Lob
@Column(name = "geomArea")
private byte[] geomArea;
@Column(name = "riskvalue")
private Double riskvalue;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
知道如何解决这个问题吗?
答案 0 :(得分:1)
我找到了问题的解决方案。在这里添加它,以防有人发现它有用。
通过从查询中删除Earthquakerisk.class并将我的List更改为List来解决此问题。所以工作代码现在如下。
List<Object[]> geomList = new ArrayList<>();
Query query = em.createNativeQuery("select astext(geomarea) geomarea,riskvalue,id from earthquakeRisk where Contains(geomarea,GeomFromText('POINT(" + node.getLongitude() + " "+node.getLatitude()+")'))");
geomList.addAll(query.getResultList());