【问题标题】:How to do hibernate spatial delete?如何进行休眠空间删除?
【发布时间】:2015-11-13 21:26:20
【问题描述】:

我想删除我的数据库数据。

这是取自 TextBox 值的 AJAX 代码:

 function deleteVector()
{
    var value = $('#hs').val();
    console.log(value);
    $.ajax({
        type: "GET",
        url: "/deleteGeoJson",
        data: {id: value},
        contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
        success: function (data) {
            var parser = new OpenLayers.Format.GeoJSON();
            var feature = parser.read(data.data);
        }
    });
}

这是我的按钮代码:

  • 删除
  • 这是我的控制器(get方法)

     SavegeojsonManager add = new SavegeojsonManager();
    
     @RequestMapping(value = "/deleteGeoJson", method = RequestMethod.GET)
    @ResponseBody
    public GeoJSON deleteGeoJson( final HttpServletRequest request,@RequestParam("id") final int vectorId) {
        return add.delete(vectorId);
    }
    

    这是 SavegeojsonManager 类代码:

     public GeoJSON delete(int id) {
    
        GeoJSON geoJson = new GeoJSON();
        try{
            EntityManager em = HibernateSpatialJPA.createEntityManager();
            em.getTransaction().begin();
            //How can I continue ?
           //If there's one thing if it is connected to the data you delete it
          //so cascade ??
    
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        return geoJson;
    }
    

    }

    这是 GeoJSON 类:

    private int id;
     public int getId() { return id; }
    public void setId(int id) {  this.id = id; }
    

    【问题讨论】:

      标签: hibernate postgresql cascade cascading-deletes hibernate-spatial


      【解决方案1】:

      首先,当您删除实体时,您不能在示例中返回该已删除实体的实例。

      你可以这样做: 在您的视图中,例如在jsp 中,您可以显示通过Controller 发送的消息。可能在来自successajax 请求中的一部分。

      控制器代码:

      @RequestMapping(value = "/deleteGeoJson", method = RequestMethod.GET)
      @ResponseBody
      public String deleteGeoJson( final HttpServletRequest request,@RequestParam("id") final int vectorId) {
          String message = null;
          boolean deleted = add.delete(vectorId);
          if(deleted){
              message = "Geo object has been deleted with id: "+vectorId;
          } else {
              message = "There was some problem with deleting GeoObject"
          }
          return message;
      }
      

      你的 dao 代码: 这可以通过多种方式完成:

       public boolean delete(int id) {
       boolean deleted = false;
       try{
          EntityManager em = HibernateSpatialJPA.createEntityManager();
          em.getTransaction().begin();
          Query query = em.createQuery("delete SavegeojsonEntity s where s.id = :id");
          query.setParameter("id", id);
      
          int result = query.executeUpdate();
          em.getTransaction().commit();
          if(result > 0){
              deleted = true;
          }
      
       } catch (Exception ex){
          ex.printStackTrace();
       }
      return deleted;
      }
      

      【讨论】:

      • 在 dao 代码中更新。缺少em.getTransaction().commit()
      • 谢谢! @PawelGłowacz
      猜你喜欢
      • 1970-01-01
      • 2021-03-25
      • 2015-02-23
      • 2022-09-27
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      相关资源
      最近更新 更多