【问题标题】:How translate this code from sql to Hibernate?如何将此代码从 sql 转换为 Hibernate?
【发布时间】:2013-02-05 04:46:05
【问题描述】:

我需要有关从 sql 到 Hibernate 的代码的帮助,希望您能帮助我完成这项工作...

SELECT x(coordenadas) as latitud, y(coordenadas) as longitud FROM datos;

我是这个页面的新用户:-(

我有两个名为 datos 和 dispositivo 的表,我正在使用 Netbeans 的 hibernate 来获取名为 datos 的表的寄存器,但问题是我不知道如何转换这句话。因为我的表包含一个名为“coordenadas”的类型数据“几何属性函数”的寄存器。 GeomFromText(“点(18.30 -99)”)。我需要在列表中将该表的寄存器作为纬度和经度。请帮助我:(。对不起我的英语,我正在学习。

我有一张表,上面有这些寄存器 datos、fecha、dirLat、dirLong、Latitud、Longitud、altura,我用这种方法获取寄存器...

package Modelo;

import com.conf.hibernate.HibernateUtil;
import com.hibernate.Datos;
import java.util.List;
import org.hibernate.Session;

public class FuncionesHibernate {
    public List<Datos> Tabla_Datos(){
        Session s = HibernateUtil.getSessionFactory().getCurrentSession();
        s.beginTransaction();
        List<Datos> lista = (List<Datos>)s.createQuery("From Datos").list();
        s.getTransaction().commit();
        return lista;
    }
}

然后使用来自 Servlet 的这段代码,我得到了纬度和经度...

FuncionesHibernate funcionesHibernate = new FuncionesHibernate();
 List<Datos> lista = funcionesHibernate.Tabla_Datos();

for(Datos d : lista){
latitud=d.getLatitud();
longitud=d.getLongitud();
}

问题是表已更新,包含纬度和经度的寄存器更改为coordenadas 几何。那么现在我需要在 mySql 的控制台中为这种新方式插入寄存器。

insert into datos values(1,1,"2013-02-02","14:00:00",GeomFromText("Point(18.30 -99)"),20);

现在我的名为“FuncionesHibernate”的方法无法正常工作。

'coordenadas' 寄存器没有其他方法可以使用新表吗? Hibernate 的新查询是什么?

对于这个 razon,我需要将此查询转换为查询 Hibernate..

SELECT x(coordenadas) as latitud, y(coordenadas) as longitud  FROM datos;

【问题讨论】:

  • 详细描述你的问题尝试把你的pojo的代码。以及您尝试了什么以及您正在寻找的预期结果是什么
  • 我有两个名为 datos 和 dispositivo 的表,我正在使用 Netbeans 的 hibernate 来获取名为 datos 的表的寄存器,但问题是我不知道如何转换这句话。因为我的表包含一个名为“coordenadas”的类型数据“几何属性函数”的寄存器。 GeomFromText(“点(18.30 -99)”)。我需要在列表中将该表的寄存器作为纬度和经度。请帮助我:(。对不起我的英语,我正在学习。
  • 您可以借助 pojo 的属性编写 hql。但我仍然不清楚你是想根据你的 pojos 属性编写查询还是要调用数据库的函数。
  • 好的,现在我得到您的问题,您想将属性设置为数据库函数的输出。 coordenadas 将由名为 GeomFromText 的函数调用的输出初始化,该函数调用接受两个输入。嗯,让我想为您准备解决方案。
  • Body 非常感谢,但是您转换的查询不正确...这是我需要在列表中转换为 Hibernate 的查询... SELECT x(coordenadas) as latitud, y(coordenadas)作为 datos 的经度;

标签: java sql hibernate hql


【解决方案1】:

函数从 HQL 转移到底层 SQL,因此您可以使用几乎相同的查询(只需指定正确的实体名称)

另一种选择是使用native query

【讨论】:

  • “coordenadas”寄存器没有其他方法可以使用新表吗? Hibernate 的新查询是什么??
【解决方案2】:

我建议使用原生查询:试试下面的代码

transaction = session.beginTransaction();
String sql = "insert into datos values(1,1,"2013-02-02","14:00:00",GeomFromText("Point(18.30 -99)"),20)";
Query query = session.createSQLQuery(sql);
query.executeUpdate();
session.getTransaction().commit();

session.flush();

如果此代码工作正常,则将硬编码值替换为动态值。

编辑:

在您的类路径中添加 hibernate-spatial-mysql-*.jar 并尝试以下代码。

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;


Coordinate coord = new Coordinate(52.5, 13.3);
Point point = new GeometryFactory().createPoint(coord);
 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
Query query = session.createQuery("FROM datos WHERE WITHIN(:location, polygon) = true", Datos.class);
query.setParameter("location", point);
session.getTransaction().commit();

【讨论】:

  • Body 非常感谢,但是您转换的查询不正确...这是我需要在列表中转换为 Hibernate 的查询... SELECT x(coordenadas) as latitud, y(coordenadas)作为 datos 的经度;
  • 所以这段代码正在工作 jajajjajaja !!!但我需要其他查询!请帮助我真实!
  • 请粘贴你所有的 COLUMNS 和 currospining POJOS 属性?
  • 好的,不需要做特别的,只需相应地更改您的 pojos 映射即可。@Type(type = "org.hibernatespatial.GeometryUserType") @Column(name = "the_geom", nullable = true) private Geometry geom ;
  • ttp://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" rel="nofollow" target="_blank">hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2019-09-29
  • 2012-07-03
  • 1970-01-01
相关资源
最近更新 更多