2011-05-05 93 views
0

是否可以像在HQL中一样表示此查询(来自Postgres)或作为hibernate标准查询?选择下一个位置

SELECT id, least(abs(gene_start - ?) , abs(gene_end - ?)) as div_pos 
FROM arraydata.gene WHERE chromosomeref = ? 
ORDER BY div_s LIMIT 1 

或者还有其他的方式来选择一个条目旁边的给定位置。如果表格中一个条目的开始或结束与查询的距离最小。

回答

1

这玩意:

least(abs(gene_start - ?) , abs(gene_end - ?)) 

是不是可转位的。我想你上了车gene_start和gene_end索引,所以你可以这样做:

SELECT id, gene_start 
FROM arraydata.gene WHERE chromosomeref = ? 
WHERE gene_start > ? 
ORDER BY gene_start LIMIT 1 

SELECT id, gene_end 
FROM arraydata.gene WHERE chromosomeref = ? 
WHERE gene_end < ? 
ORDER BY gene_end DESC LIMIT 1 

你可以用UNION结合了。至于在Hibernate中表达它,不知道!

+0

谢谢,让我在正确的方向。 – Medrod 2011-05-05 15:39:18