0
我試圖讓查詢看起來像:如何使用JPA調用SQL本機函數,需要不斷的參數?
select count(*) from somewhere group by DATEDIFF(week, '2010-01-01', creation_date);
我的問題是關於函數調用。我使用JPA的CriteriaBuilder(CB)與Hibernate下方(根是我的某處):
cb.function("DATEDIFF", Integer.class, cb.literal("week"), cb.literal('2010-01-01'), root.<Date>get("creationDate")
生成的SQL是:
select count(*) from somewhere group by DATEDIFF(?, ?, creation_date);
- param1: 'week'
- param2: '2010-01-01'
這是行不通的,因爲第一個函數參數應該是一個常數不一個 」?」。
我怎樣才能給這個常量參數注入像它(沒有引號,而不是參數)?
感謝
我在這種情況下,對象是一樣的東西:
@Entity
public class Somewhere {
@Id
private Long id;
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
// Getters and setters
}
可以嘗試cb.parameter(String.class,「周」),而不是cb.literal(「周」)和告訴我發生了什麼? –
已經嘗試過,它只是抱怨參數周沒有被設置。當我設置它時,它就變成了它正在使用的字面值(查詢中的問號,後面有一個參數集)。 – Dush
通過JPA標準API設置文字是不可能的,這些值將始終作爲參數插入。你可以通過實現'SQLFunction'接口創建你自己的'DATEDIFF'函數, day_diff,month_diff等固定了第一個參數。 –