2012-02-06 12 views
11

Mam aplikację Spring, która korzysta z JPA (Hibernate) początkowo utworzonego za pomocą Spring Roo. Trzeba przechowywać ciągi o dowolnej długości, więc z tego powodu mam uwagami pole z @Lob:Przechowywanie ciągów o dowolnej długości w Postgresql

public class MyEntity{ 

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

    ... 
} 

Aplikacja działa ok w localhost ale już wdrożone go do zewnętrznego serwera i go pojawił się problem z kodowaniem. Z tego powodu chciałbym sprawdzić, czy dane przechowywane w bazie danych PostgreSQL są w porządku, czy nie. Aplikacja automatycznie tworzy/aktualizuje tabele. I na tym polu (wiadomość) to stworzył kolumnę typu:

tekst nie NULL

Problemem jest to, że po zapisaniu danych, jeśli mogę przeglądać tabelę lub po prostu zrobić SELECT tej kolumnie Nie widzę tekstu, ale liczby. Liczby te wydają się być identyfikatorami do "gdzieś", gdzie te informacje są przechowywane.

Czy ktoś może mi powiedzieć dokładnie, jakie są te identyfikatory i czy jest jakiś sposób, aby zobaczyć zapisane dane w kolumnie @Lob columm z pgAdmin lub klauzuli select?

Czy istnieje lepszy sposób przechowywania ciągów o dowolnej długości w WZP?

Dzięki.

+0

Czy próbowałeś przeglądać DB za pomocą 'pgAdmin'? Czy możesz wyświetlić tekst w kolumnach? (to powinno zadziałać) – beerbajay

+0

@beerbajay tak, próbowałem, ale jeśli przeglądam w pgAdmin lub po prostu wykonuję SELECT, otrzymuję to samo: liczby (identyfikatory) zamiast właściwego tekstu. – Javi

+0

"Tekst NIE NULL" wydaje się w porządku, powinieneś być w stanie zobaczyć tekst. Tak naprawdę nie wygląda to na problem ze sprężyną/hibernacją/JPA, ale problem z bazą danych jest źle skonfigurowany. – beerbajay

Odpowiedz

18

Polecam omijając adnotacji do '@Lob' i używać columnDefinition tak:

@Column(columnDefinition="TEXT") 

lub

@Column(columnDefinition="LONGTEXT") 

zobaczyć czy to pomaga przeglądania danych podczas przeglądania samej bazy danych.

+0

dzięki za podstęp. Rozwiązał problem przeglądania danych bezpośrednio w aplikacji, a także problem z kodowaniem zniknął. Wygląda na to, że istnieje problem z @Lob. – Javi

1

Użyj definicji @LOB, jest poprawna. Tabela przechowuje OID do katalogów -> postegreSQL-> tables -> pg_largeobject table.

Dane binarne są tutaj zapisywane sprawnie, a JPA poprawnie pobiera dane i przechowuje je dla ciebie z tym jako szczegółem implementacji.

Powiązane problemy