2012-02-06 31 views
11

Tôi có ứng dụng Spring sử dụng JPA (Hibernate) ban đầu được tạo bằng Spring Roo. Tôi cần phải lưu trữ Strings với chiều dài tùy ý, vì vậy vì lý do đó tôi đã chú thích lĩnh vực này với @Lob:chuỗi cửa hàng có độ dài tùy ý trong Postgresql

public class MyEntity{ 

    @NotNull 
    @Size(min = 2) 
    @Lob 
    private String message; 

    ... 
} 

Ứng dụng hoạt động ok trong localhost nhưng tôi đã triển khai nó đến một máy chủ bên ngoài và nó một vấn đề với mã hóa đã xuất hiện. Vì lý do đó, tôi muốn kiểm tra xem dữ liệu được lưu trữ trong cơ sở dữ liệu PostgreSQL có được chấp nhận hay không. Ứng dụng tạo/cập nhật các bảng tự động. Và đối với lĩnh vực đó (message) nó đã tạo ra một cột kiểu:

văn bản NOT NULL

Vấn đề là sau khi lưu trữ dữ liệu nếu tôi duyệt bảng hoặc chỉ làm một SELECT của cột đó Tôi không thể nhìn thấy chữ nhưng số. Những con số đó dường như là số nhận dạng "ở đâu đó" nơi thông tin đó được lưu trữ.

Bất cứ ai có thể cho tôi biết chính xác những số nhận dạng này là gì và liệu có cách nào để có thể xem dữ liệu được lưu trữ trong @Lob columm từ pgAdmin hoặc mệnh đề chọn không?

Có cách nào tốt hơn để lưu trữ chuỗi có độ dài tùy ý trong JPA không?

Cảm ơn.

+0

Bạn đã thử duyệt DB với 'pgAdmin' chưa? Bạn có thể xem văn bản trong các cột không? (Điều này sẽ làm việc) – beerbajay

+0

@beerbajay yeah, tôi đã cố gắng, nhưng nếu tôi duyệt trong pgAdmin hoặc chỉ cần làm một SELECT tôi nhận được giống nhau: số (định danh) thay vì văn bản thích hợp. – Javi

+0

Chữ “NOT NULL” có vẻ tốt, bạn có thể thấy văn bản. Vì vậy, điều này không thực sự có vẻ giống như một vấn đề mùa xuân/hibernate/JPA, nhưng một vấn đề cơ sở dữ liệu-là-misconfigured. – beerbajay

Trả lời

18

Tôi muốn giới thiệu bỏ qua chú thích của @Lob 'và sử dụng ColumnDefinition như thế này:

@Column(columnDefinition="TEXT") 

hoặc

@Column(columnDefinition="LONGTEXT") 

xem giúp xem dữ liệu khi duyệt cơ sở dữ liệu riêng của mình.

+0

cảm ơn vì lừa. Nó đã giải quyết được vấn đề duyệt dữ liệu trực tiếp trong ứng dụng và cũng vấn đề mã hóa đã biến mất. Dường như có sự cố với @Lob. – Javi

1

Sử dụng định nghĩa @LOB, nó là chính xác. Bảng đang lưu trữ một OID vào các danh mục -> postegreSQL-> tables -> bảng pg_largeobject.

Dữ liệu nhị phân được lưu trữ ở đây hiệu quả và JPA sẽ lấy dữ liệu một cách chính xác và lưu trữ dữ liệu đó cho bạn với chi tiết triển khai này.

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