Java JPA setParameter日期对象

时间:2017-09-06 18:22:37

标签: java postgresql jpa

我的PostgreSQL数据库中有这个功能。

create or replace function borrowaCar(integer,integer,date) returns boolean language 'plpgsql' as'
declare 
    borrow boolean;
begin
     if exists(select * from availableCars where id=$2)then
            insert into Borrows (car_id_car, person_id_person, borrow_date, return_date) values ($2,$1,$3, NULL);
            update Car set is_borrow=true where id_car=$2;
            return true;
     end if;
    return false;
end;
';

当我构建查询时,我想在2017-09-06中添加YYYY-MM-DD中的实际日期。我写这段代码:

Query query = entityManager.createNativeQuery("SELECT borrowaCar(?,?,?)");          
query.setParameter(1, idPerson);
query.setParameter(2, idCar);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
query.setParameter(3, sdf.format(date));

但是这个解决方案会返回错误:

  

org.postgresql.util.PSQLException:错误:function borrowacar(整数,   整数,字符变化)不存在Wskazówka:没有功能   匹配给定的名称和参数类型。您可能需要添加   显式类型转换。

问题是什么?

1 个答案:

答案 0 :(得分:0)

问题在于您定义的功能

borrowaCar(integer, integer, date)  

与您的参数不匹配:

borrowacar(integer, integer, character varying)

调用sdf.format(date)会返回一个String,并被解释为"字符变化"。你需要在Table Borrows的Column borrow_date中使用definded类型。