zipcodes列表 - MySql JSON数组

时间:2018-01-27 06:38:04

标签: java mysql hibernate

所以我有一个zipcodes列表,我应该如何将其保存到mySql中?我当时认为是一个JSON数组。现在,我一直坚持在给定的JSON数组中找到特定的邮政编码。

insert into Test values (2, '[22279, 22510, 12345, 65412, 78954]');

我以为我会使用JSON_CONTAINS,但我似乎无法弄清楚如何使用它:

SELECT * FROM Test WHERE 
    JSON_CONTAINS(testJson, 22079);

我在上述查询中收到此错误:

SELECT * FROM Test WHERE      JSON_CONTAINS(testJson, 22079) LIMIT 0, 1000  Error Code: 3146. Invalid data type for JSON data in argument 2 to function json_contains; a JSON string or JSON type is required.

哦,我如何使用hibernate来执行上述查询?

2 个答案:

答案 0 :(得分:0)

这似乎有效:

SELECT * FROM Test WHERE 
    JSON_CONTAINS(testJson, '12345');

这也来自Postman:

{
    "test": {
        "id": "5",
        "testJson" : "[22079, 22310, 12345, 65412, 78954]"
    }
}

Java pojo看起来像:

import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Test {

    @Id
    private Integer id;
    private String testJson;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTestJson() {
        return testJson;
    }

    public void setTestJson(String testJson) {
        this.testJson = testJson;
    }

}

答案 1 :(得分:0)

我发现,如果列表中的值是字符串,则必须使用双引号搜索它们(因为字符串必须用双引号括起来才能成为有效的JSON)。

示例:

CREATE TABLE Test (
  id INT PRIMARY KEY,
  testJson JSON
);

insert into Test (id, testJson) values (1, '["Hello", "Goodbye", "Now", "Later", "Sometime"]');
insert into Test (id, testJson) values (2, '["Hi", "Bye", "Today", "Tomorrow", "Yesterday"]');

SELECT id FROM Test WHERE JSON_CONTAINS(testJson, '"Hi"');

返回:2