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

JavaMysqlOrmJpa

Java Problem Overview


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 Java String into MySQL Text

Here you go 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 my MYSQL database, content is type Text. I was hoping that there would be something like this java.sql.Text, since java.sql.Blob is an actual type, but sadly, that does not exist

Java Solutions


Solution 1 - Java

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"

Solution 2 - Java

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".

Solution 3 - Java

for mysql 'text':

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

for mysql 'longtext':

@Lob
private String description;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionThang PhamView Question on Stackoverflow
Solution 1 - JavaPascal ThiventView Answer on Stackoverflow
Solution 2 - JavaReitffunkView Answer on Stackoverflow
Solution 3 - JavaMaxpanView Answer on Stackoverflow