是否有可能像在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
或者是否有其他方法可以选择给定位置旁边的条目。表格中一个条目的开头或结尾与查询的距离最小。
答案 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中表达它,不知道!