2014-12-22 36 views
8

JSON alanları olan bir PostgreSQL veritabanım var. JSON ifadeleriyle sonuçları kısıtlayan bir sorgu oluşturmak istiyorum. Ben sorun olmadan psql'de bu sorguyu formüle edebiliriz:JPA2/Hazırda Bekletme Ölçütleri veya ÖlçütleriQuery for Postgres JSON türü

select * from mytable where relation_id=100 AND CAST(jsonField->'key' AS float) >= 10.0; 

Bu sorgu normal kolon ve JSON sütunu birleştirir.

Kriterler veya Kriterler sorgusu kullanılarak Hazırda bekletme modunda nasıl başlayacağımı bilmiyorum. Teorik olarak HSQL dilini kullanabilirdim, ancak JSON sütununa gelince başarısız olacak neredeyse kesin.

Bunun nasıl üstesinden gelineceği konusunda bir fikri var mı?

+1

gibi sorguda kullanmak ve Operatörler, Kriterler API'sine ve/veya HQL'ye. Bu bir ORM kullanmak için ödediğiniz bedeldir - ilginç ve veritabanı işlevselliğinin en düşük ortak paydası dışında bir şey yapmak istediğinizde elverişli. –

+0

Bu konu hakkında herhangi bir haber var mı? – giaffa86

+0

Maalesef, hayır. –

cevap

1

Bunu yapmanın tek yolu, CAST(jsonField->'key' AS float) ifadesi için bir özel SQLFunction yazmak ve sonra bunu JPQL'de kullanmaktır. registerFunction("json_float", new JsonFloatFunction()) ile lehçesinde

public String render(Type firstArgumentType, List args, SessionFactoryImplementor factory) throws QueryException { 
    return "CAST(" + args.get(0).toString() + "->'" + args.get(1).toString() + "' AS float)"; 
} 

Kayıt ve Sen JSON türlerini ekleyen hazırda uzantı yazmak için istekli olmadıkça yerli sorguları kullanmak gerekecektir

SELECT o FROM MyTable o WHERE o.relation.id = 100 AND JSON_FLOAT(o.jsonField, 'key') >= 10.0