3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
未為本機(jī)查詢定義使用命名參數(shù)。根據(jù)JPA規(guī)范(第3.6.3節(jié)“ 命名參數(shù)”):
命名參數(shù)遵循第4.4.1節(jié)中定義的標(biāo)識(shí)符規(guī)則。命名參數(shù)的使用適用于Java Persistence查詢語(yǔ)言,而不是為本機(jī)查詢定義的。 僅位置參數(shù)綁定可用于本機(jī)查詢。
因此,請(qǐng)嘗試以下操作:
String queryString = "select * from Cell c where ST_DWithin(c.shape, SetSRID(ST_GeomFromEWKT('POINT(?1 ?2)'),4326), 0.1)";
Query query = Cell.em().createNativeQuery(queryString, Cell.class);
query.setParameter(1, longitude);
query.setParameter(2, latitude);
請(qǐng)注意,在JPA> = 2.0中,可以在本機(jī)查詢中使用命名參數(shù)。

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
也許你可以更換
'POINT(:lon :lat)'
與
'POINT(' || :lon || ' ' || :lat || ')'
這樣,參數(shù)位于常量字符串之外,并且應(yīng)由查詢解析器識(shí)別。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
我遇到了類似的問(wèn)題,發(fā)現(xiàn)可以在本機(jī)查詢中使用問(wèn)號(hào)設(shè)置參數(shù)。嘗試這個(gè):
String queryString = "select * from Cell c where ST_DWithin(c.shape, SetSRID(ST_GeomFromEWKT('POINT(? ?)'),4326), 0.1)";
Query query = Cell.em().createNativeQuery(queryString, Cell.class);
query.setParameter(1, longitude);
query.setParameter(2, latitude);
添加回答
舉報(bào)