Wie migriere ich PostgreSQL strings zu einem text geben?

Wir verwenden JPA-annotierten Typ, der so aussieht (groovy-code):

@Entity
@EqualsAndHashCode
class TextNote extends Serializable {
    @Id Long id
    String text
}

Wenn es zum ersten mal geschrieben, ich war sehr neu für JPA und schrieb die SQL der erste, dann aus den annotierten Klassen entsprechend SQL. Lesen Sie auf der PostgreSQL-es schien, dass die folgende war die Tabelle die ich wollte:

CREATE TABLE textnote (
    id bigint NOT NULL,
    text text
);

Funktionierte, und wir hatten Tische, die wie folgt aussah:

 id  |          text
-----+------------------------
 837 | really long text here

Was ich jetzt machen möchte, ist richtig in der JPA-Entity wie folgt Aussehen:

@Entity
@EqualsAndHashCode
class TextNote extends Serializable {
    @Id Long id
    @Lob String text
}

Indem die @Lob Annotationen der JPA-provider (in meinem Fall, hibernate) generieren konnte die DDL richtig für mich im Falle wollen wir die swap-Datenbanken. Es ist auch dokumentiert, genau das, was ich will, das Textfeld zu werden. Wenn jetzt ein Hinweis erzeugt wird, sehe ich etwas wie dieses:

 id  |          text
-----+------------------------
 837 | 33427

Das ist gut für neue Noten, wie wenn ich es gelesen habe im code mit String getText() gibt den wirklich langen text. Ehrlich gesagt, ich weiß nicht, wie PostgreSQL implementiert die text geben, noch muss ich in der Theorie. Aber unsere Produktions-Datenbank hat schon viele Notizen gespeichert, Alter code, ohne die @Lob annotation. Mit dem neuen code auf einer vorhandenen Datenbank generiert werden Fragen wie diese:

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

Für bestehende notes, gibt es eine Möglichkeit in SQL zu migrieren, die alten Noten zu verwenden @Lob und text korrekt eingeben? Vielen Dank im Voraus.

InformationsquelleAutor Joe | 2013-01-24
Schreibe einen Kommentar