PostgreSQL:查询json列中的特定字段

时间:2016-03-14 18:53:05

标签: java hibernate postgresql

我有一个DB表,其中有一个名为'expected'的列,定义为json。

并且db中的一行具有以下值:

basename

我正在尝试使用Hibernate选择此行,如下所示:

expected = {"min":5, "max":20, "league_id":7}

我得到以下异常:

Object[] league = (Object[])session.createSQLQuery(
                "SELECT id, name, type, expected, content " +
                "FROM bonus " +
                "WHERE CAST(expected->>league_id as numeric)=7")
                .uniqueResult();

为什么它试图将league_id翻译成一个专栏?

顺便说一下,如果我在我的pgAdmin工具中尝试这个查询,那就完美了!

任何帮助将不胜感激! 感谢。

1 个答案:

答案 0 :(得分:1)

您应该league_id引用'

SELECT id, name, type, expected, content
FROM bonus
WHERE (expected->>'league_id')::int = 7;

SqlFiddleDemo

  

JSON Functions and Operators

╔═════════╦══════╦═══════════════════════════════╦═════════════════════════════╦════════╗
║ Operator║ Type ║         Description           ║          Example            ║ Result ║
╠═════════╬══════╬═══════════════════════════════╬═════════════════════════════╬════════╣
║ ->>     ║ text ║ Get JSON object field as text ║ '{"a":1,"b":2}'::json->>'b' ║      2 ║
╚═════════╩══════╩═══════════════════════════════╩═════════════════════════════╩════════╝