2013-04-05 37 views
5

trường hợp của tôi là như sau. Tôi có một hình thức JSF với ba outputtexts & các inputtexts tương ứng cho phép nói:cách lưu trữ đối tượng json vào trường cơ sở dữ liệu hibernate

outputtext1 - inputtext1

outputtext2 - inputtext2

outputtext3 - inputtext3

Hiện nay tôi sử dụng một phương pháp backbean 'Lưu' trong để lưu trữ chúng vào cơ sở dữ liệu (đối tượng ngủ đông cho phép nói table1 với khóa chính table1.id) vào các trường table1.field1, table1.field2, table1.field3.

Vì vậy, mỗi bản ghi trong bảng có các giá trị được chèn vào trong đầu vào.

Câu hỏi của tôi là thế nào am i sẽ dữ liệu mẫu cửa hàng trong cơ sở dữ liệu, trong một hình thức như sau:

{ "outputtext1: inputtext1", "outputtext2: inputtext2" "outputtext3:. Inputtext3 "}

và sau đó tìm nạp lại, phân tích cú pháp và tạo lại biểu mẫu. Tôi đang nghĩ đến việc thao tác dữ liệu biểu mẫu dưới dạng đối tượng JSON ... Nhưng tôi mới dùng cả Java + JSON, vì vậy một số tính trung thực sẽ thực sự hữu ích đối với tôi!

Đây là ví dụ điển hình, biểu mẫu sẽ linh hoạt và được tạo khi đang di chuyển.

+0

Nó chỉ là một Chuỗi, sử dụng 'varchar'. Sử dụng Trình nối tiếp JSON. –

+0

vì vậy tôi đang đi đúng hướng về cách thao tác dữ liệu biểu mẫu? Biểu mẫu sẽ có tính động nên không có định dạng dữ liệu biểu mẫu chuẩn. – thanili

+0

Nếu không có biểu mẫu chuẩn, thì tôi giả sử bạn đang tạo Chuỗi JSON. Một khi bạn có nó, lưu trữ nó trong một trường varchar. –

Trả lời

4

Tại sao bạn sẽ muốn serialize/deserialize một JSON để gửi nó trực tiếp đến cơ sở dữ liệu? Deserialization có vấn đề riêng của mình và nhiều deserializations có thể (không sẽ) là một nguồn của các vấn đề.

Bạn nên lưu các trường dưới dạng thuộc tính từ một thực thể nhất định và sau đó, với sự trợ giúp của các thư viện như Gson, hãy tạo JSON từ thực thể.


Cập nhật

Kể từ khi hình thức của bạn là năng động, bạn có thể sử dụng một số cấu trúc tổ chức thích nghi để giữ dữ liệu của bạn.

Thực thể của bạn có thể có thuộc tính Map<String,String> hoặc một tập hợp, ví dụ: FieldRecord đối tượng chứa cặp khóa-giá trị.

Tôi đề nghị điều này vì JSON trong cơ sở dữ liệu có thể dẫn đến các vấn đề phức tạp, đặc biệt nếu bạn sẽ phải truy vấn dữ liệu đó sau. YOu sẽ phải xử lý các JSON để báo cáo hoặc tìm các bản ghi nào có một trường cụ thể. Đây chỉ là một ví dụ, mọi thứ có thể trở nên phức tạp hơn.

+0

Biểu mẫu sẽ trở nên năng động, vì vậy tôi sẽ không có số lượng hoặc loại trường nhập chuẩn. Đây chỉ là một ví dụ điển hình! – thanili

+0

@thanili Bạn có thể có một thực thể với một 'Bản đồ ' hoặc một danh sách các thực thể kết hợp. IMO Việc lưu trữ một JSON trong cơ sở dữ liệu có thể rất khó xử lý, đặc biệt nếu bạn muốn truy vấn về các trường cụ thể sau này. Tuy nhiên, nếu bạn được thiết lập bằng cách sử dụng một json, chỉ cần tạo nó và lưu nó vào một biến VARCHAR. – Gamb

+0

OK Gamb, tôi sẽ kiểm tra đề xuất của bạn một cách đơn giản hơn. Thật vậy, tôi sẽ phải truy vấn cơ sở dữ liệu để tìm nạp các giá trị đã gửi cho các biểu mẫu được tải lại. Vì vậy, tôi đoán tôi sẽ phải lấy đối tượng JSON, deserialize nó, phân tích nó, so sánh nó với id trường mẫu và tái cấu trúc các hình thức :) nó âm thanh quá nhiều rắc rối ... – thanili

0

đơn giản, bạn cần có một cột kiểu BLOB trong bảng của bạn để lưu trữ các json và khi bạn lấy nó trong java bạn chỉ cần để giải mã các json và tôi khuyên bạn nên sử dụng https://code.google.com/p/json-simple/ của nó rất đơn giản

0

Chuyển đổi JSONObject thành dạng String và sau đó lưu trữ. Và khi bạn đọc nó trở lại, chuyển đổi nó trở lại vào JSONObject như dưới đây:

 JSONObject obj = new JSONObject(stringRepresentationOfJSON); 
-2

thay đổi ngủ đông-mapping như tên thuộc tính

này = "managementVlan" type = "string" cột name = "ManagementVlan "chiều dài =" 65535" tài sản

Thay đổi kiểu văn bản trong db

ALTER bảng EMPLOYEE sửa đổi văn bản ManagementVlan;

conver Json thành chuỗi

Chuỗi cuối cùngVlanTrunk = managementVlanJsonArray.toString();

đặt giá trị và lưu;

Các vấn đề liên quan