JPA查询使用数据库函数来使用特定索引

时间:2015-06-29 11:57:56

标签: java jpa spring-data spring-data-jpa postgresql-9.3

我有一个名为vehicle的表,其中有一个名为VIN的列。 用户需要能够根据VIN的最后6个字符进行搜索。 所以我在Postgres中添加了一个索引,如下所示:

  CREATE INDEX "ix_vin_last_6" ON vehicle(RIGHT(vin,6));

我添加了一些测试记录如下:

LAST6VIN_A_123456
LAST6VIN_B_123456
LAST6VIN_C_123456

使用SpringDataJPA存储库,这是查询上述测试记录的一种方法:

List<Vehicle> findByVinEndingWith(String vin)

但上面生成的JPA查询使用LIKE子句,如下所示:

where
    vehicle0_.vin like ?

如何使用最后6个使用我在上面创建的索引的字符创建一个存储库方法来查询上述3个测试记录,以便生成此查询:

SELECT vin, year, make, model
FROM vehicle 
WHERE RIGHT(vin,6) = '123456';

当我使用pgadmin命令行执行它时,上面的查询工作正常。

1 个答案:

答案 0 :(得分:2)

JPQL支持(因为JPA 2.1 IIRC)使用function调用任意数据库函数:

select v from Vehicle v
where function('RIGHT', v.vin, 6) = :endOfVin