JPA: как сохранить строку в поле базы данных, введите MYSQL Text - PullRequest
72 голосов
/ 06 октября 2010

Требуется, чтобы пользователь мог написать статью, поэтому я выбираю тип Text для поля content внутри базы данных mysql. Как я могу конвертировать Java String в MySQL Text

Вот, пожалуйста, 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
}

В моей базе данных MYSQL content имеет тип Text. Я надеялся, что будет что-то подобное java.sql.Text, поскольку java.sql.Blob является действительным типом, но, к сожалению, его не существует

Ответы [ 3 ]

120 голосов
/ 06 октября 2010

Поскольку вы используете JPA, используйте аннотацию Lob (и дополнительно аннотацию Column). Вот что говорится в спецификации JPA:

9.1.19 Аннотация аннотации

A Lob аннотация указывает, что постоянное свойство или поле должно быть сохранился как большой объект для поддерживаемый базой данных тип большого объекта. Портативные приложения должны использовать Lob аннотация при отображении на Тип базы данных. Лоб аннотация может использоваться вместе с Basic аннотация. Лоб может быть двоичный или символьный тип. Тип лепестка выводится из типа постоянное поле или свойство, и кроме строковых и символьных типы по умолчанию Blob.

Итак, объявите что-то вроде этого:

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

Ссылки

  • JPA 1.0 спецификация:
    • Раздел 9.1.19 "Аннотация аннотации"
88 голосов
/ 26 марта 2014

С @Lob Я всегда получаю LONGTEXT в MySQL.

Чтобы получить TEXT, я заявляю это так (JPA 2.0):

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

Найдите это лучше, потому что я могу напрямую выбрать тип текста, который будет иметь столбец в базе данных.

Для columnDefinition также хорошо читать это .

РЕДАКТИРОВАТЬ: Пожалуйста, обратите внимание на Adam Siemions комментарий и проверьте используемый вами механизм базы данных, прежде чем применять columnDefinition = "TEXT".

16 голосов
/ 21 мая 2015

для mysql 'text':

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

для mysql 'longtext':

@Lob
private String description;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...