如何将此代码从sql转换为Hibernate?

时间:2013-02-05 04:46:05

标签: java sql hibernate hql

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

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

我是此页面中的新用户: - (

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

我有一个包含这些寄存器数据的表,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的代码,我得到了Latitud和Longitud ......

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

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

问题是表格已更新,包含Latitud和Longitud的寄存器更改为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;

2 个答案:

答案 0 :(得分:0)

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

另一种选择是使用native query

答案 1 :(得分:0)

我建议使用原生查询:尝试以下代码

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();