このWORKINGアプローチを使用して、Hibernate Spatialライブラリ(http://www.hibernatespatial.org/)を使用してデータベースから空間データ(つまりポイント)を返そうとしています...
...
Session session = sessionFactory.openSession();
Query query = session.createQuery("select location, distance(location, :requestPoint) from "+Event.class.getName());
query.setParameter("requestPoint", requestPoint);
List<?> rows = query.list();
session.close();
List<Event> events = new ArrayList<Event>();
for (Iterator<?> it = rows.iterator(); it.hasNext(); ) {
Object[] row = (Object[]) it.next();
Event event = new Event();
event.setLocation((Point) row[0]);
event.setDistance((Double) row[1]);
events.add(event);
}
return events;
しかし、私はこのようなものを使用したいと思います(選択ステートメントでイベントクラスコンストラクターを使用します)...
Session session = sessionFactory.openSession();
Query query = session.createQuery("select new Event(location, distance(location, :requestPoint)) from "+Event.class.getName());
query.setParameter("requestPoint", requestPoint);
List<Event> rows = query.list();
session.close();
return rows;
問題は、2番目のアプローチで次の例外が発生することです...
org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.jaygridley.aet.Event] [select new Event(location, distance(location, :requestPoint)) from com.jaygridley.aet.domain.Event]
しかし、 Event クラス内にコンストラクターがあるため、理由がわかりません...
public Event(Point location, Double distance) {
this.location = location;
this.distance = distance;
}
明確にするために、イベントクラスには次のプロパティがあります...
@Column(name="LOCATION", columnDefinition = "MDSYS.SDO_GEOMETRY", nullable = false)
@Type(type = "org.hibernate.spatial.GeometryType")
private Point location;
private Double distance;
Hibernate が返す各列の戻りクラスを確認したところ、Point と Double に一致します。誰かが私が間違っていることを知っていますか? ありがとうございます!