JPA: Wie kann ich eine Zeichenfolge in einem Datenbankfeld beibehalten, geben Sie MYSQL-Text ein

Lesezeit: 2 Minuten

Benutzer-Avatar
Than Pham

Die Voraussetzung ist, dass der Benutzer einen Artikel schreiben kann, daher wähle ich Typ Text für die content Feld in der MySQL-Datenbank. Wie kann ich konvertieren Java String hinein MySQL Text

Bitte schön Jim Tough

@Entity
public class Article implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private Long userId;

    private String title;

    private String content;

    private Integer vote;

    //Constructors, setters, getters, equals and hashcode
}

In meiner MYSQL-Datenbank content Typ ist Text. Ich hatte gehofft, dass es so etwas geben würde java.sql.Textseit java.sql.Blob ist ein echter Typ, aber leider gibt es den nicht

Benutzer-Avatar
Pascal Thivent

Da Sie JPA verwenden, verwenden Sie die Lob Anmerkung (und optional die Column Anmerkung). Hier ist, was die JPA-Spezifikation dazu sagt:

9.1.19 Lob-Anmerkung

EIN Lob Annotation gibt an, dass eine persistente Eigenschaft oder ein persistentes Feld als großes Objekt für einen datenbankgestützten großen Objekttyp persistent gespeichert werden soll. Portable Anwendungen sollten die verwenden
Lob Anmerkung bei der Zuordnung zu einem Datenbank-Lob-Typ. Die Lob-Anmerkung kann in Verbindung mit verwendet werden
Basic Anmerkung. Ein Lob kann entweder ein Binär- oder ein Zeichentyp sein. Der Lob-Typ wird vom Typ des persistenten Felds oder der Eigenschaft abgeleitet und ist mit Ausnahme von zeichenfolgen- und zeichenbasierten Typen standardmäßig Blob.

Deklarieren Sie also so etwas:

@Lob 
@Column(name="CONTENT", length=512)
private String content;

Verweise

  • JPA 1.0-Spezifikation:
    • Abschnitt 9.1.19 „Lob-Anmerkung“

  • Verwenden Sie im Hibernate JPA MYSQL @Lob Plus @Column Anmerkung zu einem String-Feld ergibt “falscher Spaltentyp, langer Text erwartet, aber Spaltentyp ist Text”. Aber das Problem ist gelöst, wenn ich verwendet @Column(columnDefinition = "text")

    – gerrytan

    18. April 2013 um 0:22 Uhr

  • Welchen Sinn hat das Kombinieren @Lob und @Column(length=512)? Warum nicht einfach glücklich sein @Lob? Beides macht bei Verwendung von Hibernate JPA MySQL keinen Unterschied. Beide führen zum MySQL-Feldtyp longtext.

    – Sokrates

    6. März 2017 um 15:07 Uhr


  • Ich hatte einen binären Spaltentyp und die @Lob Anmerkung hat bei mir nicht funktioniert. Jedoch, @Column(length=8192) Hat super funktioniert und mein Problem gelöst.

    – Laurentius

    8. Juni 2018 um 23:35 Uhr

Benutzer-Avatar
Reitfunk

Mit @Lob Ich lande immer bei a LONGTEXTbei MySQL.

Bekommen TEXT Ich deklariere es so (JPA 2.0):

@Column(columnDefinition = "TEXT")
private String text

Finde das besser, weil ich direkt auswählen kann, welchen Text-Typ die Spalte in der Datenbank haben soll.

Zum columnDefinition das ist auch gut zu lesen.

BEARBEITEN: Bitte beachten Sie den Kommentar von Adam Siemion und überprüfen Sie die von Ihnen verwendete Datenbank-Engine, bevor Sie sich bewerben columnDefinition = "TEXT".

  • Dies ist keine gute Lösung, da die TEXT-Datenspalte nicht in allen Datenbank-Engines verfügbar ist, z. B. HSQLDB, Details: stackoverflow.com/questions/4213782/…

    – Adam Siemion

    1. September 2014 um 10:01 Uhr

  • Dies ist, was ich wollte, weil es in allen Produktionsdatenbanken verfügbar ist und kein Problem mit “Longtext” hat, wenn ich es nicht möchte.

    – Nicholas DiPiazza

    10. Januar 2015 um 20:48 Uhr


für mysql ‘text’:

@Column(columnDefinition = "TEXT")
private String description;

für mysql ‘longtext’:

@Lob
private String description;

1269620cookie-checkJPA: Wie kann ich eine Zeichenfolge in einem Datenbankfeld beibehalten, geben Sie MYSQL-Text ein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy