-1

SQL から Hibernate へのこのコードについて助けが必要です。この作業を手伝ってくれることを願っています...

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

私はこのページの新しいユーザーです :-(

datos と dispositivo という 2 つのテーブルがあります。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;
    }
}

次に、サーブレットからのこのコードを使用して、緯度と経度を取得しました...

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;
4

2 に答える 2

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();
于 2013-02-05T06:40:29.370 に答える
0

関数は HQL から基になる SQL に転送されるため、おそらくほとんど同じクエリを使用できます (正しいエンティティ名を指定するだけです)。

もう 1 つのオプションは、ネイティブ クエリを使用することです。

于 2013-02-05T06:11:42.817 に答える