JPA: how do I persist a String into a database field, type MYSQL Text

前端 未结 3 1312
夕颜
夕颜 2020-12-02 09:48

The requirement is that the user can write an article, therefore I choose type Text for the content field inside mysql database. How can I convert

相关标签:
3条回答
  • 2020-12-02 10:12

    Since you're using JPA, use the Lob annotation (and optionally the Column annotation). Here is what the JPA specification says about it:

    9.1.19 Lob Annotation

    A Lob annotation specifies that a persistent property or field should be persisted as a large object to a database-supported large object type. Portable applications should use the Lob annotation when mapping to a database Lob type. The Lob annotation may be used in conjunction with the Basic annotation. A Lob may be either a binary or character type. The Lob type is inferred from the type of the persistent field or property, and except for string and character-based types defaults to Blob.

    So declare something like this:

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

    References

    • JPA 1.0 specification:
      • Section 9.1.19 "Lob Annotation"
    0 讨论(0)
  • 2020-12-02 10:16

    for mysql 'text':

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

    for mysql 'longtext':

    @Lob
    private String description;
    
    0 讨论(0)
  • 2020-12-02 10:18

    With @Lob I always end up with a LONGTEXTin MySQL.

    To get TEXT I declare it that way (JPA 2.0):

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

    Find this better, because I can directly choose which Text-Type the column will have in database.

    For columnDefinition it is also good to read this.

    EDIT: Please pay attention to Adam Siemions comment and check the database engine you are using, before applying columnDefinition = "TEXT".

    0 讨论(0)
提交回复
热议问题