当前位置: 首页 > 知识库问答 >
问题:

对象引用了未保存的瞬态实例-在使用hibernate spatial刷新之前保存瞬态实例

郎伟兆
2023-03-14

我正在尝试执行此查询:

StringBuffer sb = new StringBuffer();
sb.append("select p from PointsEntity p " + "where within(p.coordinates,:polygon) = true");

但是我有这个例外:

org . hibernate . transientobjectexception:对象引用未保存的瞬态实例-刷新前保存瞬态实例:com . GIS app . spring boot . back end . API rest . models . entity . polygonentity

这是多边形实体:

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

@Column(name = "user_id")
private Long userId;

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

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

@Column(name = "coordinates")
private Polygon coordinates;

我在这里阅读了一个可能的解决方案,但观察实体,该解决方案已经在包含多边形集合的UserEntity中实现:

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private List<PointsEntity> pointsList;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private List<PolygonEntity> polygonsList;

为什么我有这个例外?

共有1个答案

公西苗宣
2023-03-14

最后,我使用了另一种方法来使用 inside 方法。

我创建了一个临时表和一个实体来保存多边形,稍后我执行此查询:

StringBuffer sb = new StringBuffer();
        sb.append("select p from PointsEntity p, TempPolygonEntity t "
        + "where within(p.coordinates, t.coordinates) = true"); 

多边形将被保存,然后在使用后删除。

 类似资料: