选择下一个位置

时间:2011-05-05 10:18:20

标签: hibernate postgresql

是否有可能像在HQL中那样表达此查询(来自Postgres)或作为休眠条件查询?

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

或者是否有其他方法可以选择给定位置旁边的条目。表格中一个条目的开头或结尾与查询的距离最小。

1 个答案:

答案 0 :(得分: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

您可以将两者结合使用。至于在Hibernate中表达它,不知道!