2014-12-22 1 views
8

JSON 필드가있는 PostgreSQL 데이터베이스가 있습니다. JSON 식으로 결과를 제한하는 쿼리를 작성하고 싶습니다. 문제없이 psql에서이 쿼리를 공식화 할 수 있습니다.Postgres 용 JPA2/Hibernate 기준 또는 CriteriaQuery JSON 유형

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

이 쿼리는 일반 열과 JSON 열을 결합합니다.

기준 또는 조건 쿼리를 사용하여 최대 절전 모드에서이를 시작하는 방법을 알지 못합니다. 나는 이론 상으로는 HSQL 언어를 사용할 수 있지만 JSON 열에 대해서는 실패 할 것이라는 확신은 거의 확실합니다.

아무도 아이디어를 가지고 태클을 할 수 있습니까?

+1

같은 쿼리에서 사용하고 연산자를 Criteria API 및/또는 HQL에 추가합니다. ORM을 사용하여 지불하는 가격입니다. 재미있는 일을하고 가장 공통점이 적은 데이터베이스 기능을 사용하기 전까지는 편리합니다. –

+0

이 주제에 관한 뉴스? – giaffa86

+0

불행히도, 아니오. –

답변

1

CAST(jsonField->'key' AS float) 표현에 대해 사용자 정의 SQLFunction을 작성한 다음이를 JPQL에서 사용하는 유일한 방법이 있습니다. registerFunction("json_float", new JsonFloatFunction())와 사투리

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

등록하고 당신은 JSON 유형을 추가하는 최대 절전 모드 확장을 쓸 의향이 아니라면 기본 쿼리를 사용해야합니다

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