PostgreSQLに任意の長さの文字列を格納する

Spring Rooで最初に作成されたJPA( Hibernate )を使用するSpringアプリケーションがあります。私は任意の長さの文字列を格納する必要があります。そのために、フィールドに @Lob というフィールドを注釈しました:

public class MyEntity{

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

    ...
}

アプリケーションはlocalhostで正常に動作しますが、私はそれを外部サーバーにデプロイしました。エンコードに問題が発生しました。そのため、私はPostgreSQLデータベースに格納されているデータが大丈夫かどうかをチェックしたいと思います。アプリケーションはテーブルを自動的に作成/更新します。そして、そのフィールド(メッセージ)に対して、タイプの列を作成しました:

テキストはNULLではありません

問題は、データを格納した後にテーブルを参照するか、その列のSELECTを行うだけで、テキストは表示されず、数値は表示されないということです。これらの数字は、その情報が格納されている「どこか」の識別子と思われます。

誰が私にこれらの識別子が何であるかを正確に教えてもらえますか?また、pgAdminまたはselect節から@Lob列に格納されたデータを見ることができる方法があれば教えてください。

JPAに任意の長さのストリングを格納するためのよりよい方法はありますか?

ありがとう。

11
@beerbajayええ、私は試しましたが、pgAdminを参照するか、SELECTを実行すると、正しいテキストの代わりに数値(識別子)が得られます。
追加された 著者 Javi,
Lobsに関する議論から、私は現時点では見つけることができませんが、新しいバージョンのhibernateは注釈@Lobを使用するときにpostgresqlラージオブジェクト機能を使用することを理解しました。大きなオブジェクトはテーブルに直接格納できないため、オブジェクトのOIDがテーブルに格納されますが、表示される番号はオブジェクトのOIDです。
追加された 著者 Eelke,
pgAdmin でDBをブラウズしようとしましたか?あなたは列のテキストを見ることができますか? (これはうまくいくはずです)
追加された 著者 beerbajay,
text not NULL は問題なく表示されます。テキストを表示できるはずです。だから、これは実際には春/休止状態/ JPAの問題のようには思えませんが、データベースの設定ミスの問題です。
追加された 著者 beerbajay,

2 答え

私は '@ Lob'アノテーションをスキップし、columnDefinitionを次のように使用することをお勧めします:

@Column(columnDefinition="TEXT")

または

@Column(columnDefinition="LONGTEXT")

それがデータベース自体をブラウズしている間にデータの表示に役立つかどうかを確認してください。

18
追加された
トリックのおかげでアプリケーションで直接データをブラウズするという問題を解決し、エンコーディングの問題も解決していません。 @Lobに問題があるようです。
追加された 著者 Javi,

Use the @LOB definition, it is correct. The table is storing an OID to the catalogs -> postegreSQL-> tables -> pg_largeobject table.

バイナリデータはここで効率的に保存され、JPAはデータを正しく取得して実装の詳細として保存します。

1
追加された