考虑以下对象类:
+---------------------------+ +----------------------+
|Planet() | |Coordinate() |
+---------------------------+ +----------------------+
|coordinates Coordinate() | |xcoordinate int |
|lastVisit int | |ycoordinate int |
+---------------------------+ +----------------------+
我希望得到与另一个星球在z单位范围内的行星,但只有那些具有最高lastVisit数的行星,这样我才能获得最新的行星信息(有可能多次保存同一行星,在不同的" lastVisit" s。
Coordinate()对象使用@Embeddable
进行注释,并且在行星对象中为@embedded
。
在我的DAO中,我有这个方法,几乎我想要的东西 - 我只能提取地球的最新实例:
@Override
public List<Planet> getRecentPlanets() {
Session session = sessionfactory.getCurrentSession();
// create a query and sort it by last name using sql
Query<Planet> theQuery = session.createQuery("FROM Planet p WHERE (p.coordinates.xcoordinate, p.coordinates.ycoordinate, p.lastVisit) in"
+ "(SELECT p1.coordinates.xcoordinate, p1.coordinates.ycoordinate, max(p1.lastVisit) FROM Planet p1 group by p1.coordinates)",
Planet.class);
return theQuery.getResultList();
}
但是,我似乎无法掌握如何在数据库方面包含曼哈顿距离。
我的问题是:
附加信息:数据库大小受稀疏曼哈顿网格约500x500的限制。我估计不会超过200转,每转约50&#34;访问&#34;可能会发生。