:PostgreSQL文字列をテキストタイプに移行するにはどうすればよいですか?
それは最初に私はJPAに非常に新しかったとSQLが最初に、その後、注釈付きクラスが一致して作っ書い書かれた@Entity
@EqualsAndHashCode
class TextNote extends Serializable {
@Id Long id
String text
}
SQL。 PostgreSQLの上に読んで、以下は私が望んでいたテーブルだったようにそれが見えた:
CREATE TABLE textnote (
id bigint NOT NULL,
text text
);
これは働いていた、と我々はこのように見えたテーブル持っていた:私は今、何をしたいか
id | text
-----+------------------------
837 | really long text here
が正しいですJPAエンティティは次のように見て:
@Entity
@EqualsAndHashCode
class TextNote extends Serializable {
@Id Long id
@Lob String text
}
を@Lob
注釈にJPAプロバイダを追加することで(私の場合には、休止状態)の場合には私のために正しくDDLを生成することがありました我々はデータベースを交換したい。また、テキストフィールドが欲しいものを正確に文書化します。私はそれは本当に長いテキストを返します)文字列のgetTextを(使用してコードでそれを読んだときのように、新しいノートの罰金です
id | text
-----+------------------------
837 | 33427
:今、ノートが作成されたとき、私はこのような何かを参照してください。正直なところ私はPostgreSQLがどのようにtext
タイプを実装しているのか分かりませんし、理論的にもそうする必要はありません。しかし、本番データベースには、すでに@Lob
注釈なしで古いコードを使って多くのメモが保存されています。既存のデータベースに新しいコードを実行するには、このような問題を生成します。既存の注意事項については
org.springframework.dao.DataIntegrityViolationException: Bad value for type long : not a number this time; SQL [n/a]; nested exception is org.hibernate.exception.DataException: Bad value for type long : not a number this time
、正しく@Lob
とtext
タイプを使用するために、古いノートを移行するSQLでの方法はありますか?前もって感謝します。
から大きな助けを得、JPAプロバイダは、私が欲しいものではありませんカラム型のvarchar型、とテーブルを生成します。 '@Lob'はPostgreSQLの' text'型を生成します。これはまさに私が望むものです。データベースを切り替えるには、JPAプロバイダを使用してDDLを生成したいと考えています。それをするには '@ Lob'が必要です。理にかなっている? – Joe
'@ Lob'が' text'を生成していますか?ドキュメントと投稿された出力の両方が 'oid'を生成すると思います。これはPostgresが大きなオブジェクトをどのように格納するのかです。本当に 'text'だったら、謎の数字ではなく_text_を見るだけです。 – Eevee
私は肯定的です。ここには '@ Lob'アノテーションを付けて出力するテーブルがあります: [gist](https://gist.github.com/4630173) – Joe