Подтвердить что ты не робот

JPA: как перенести строку в поле базы данных, введите текст MYSQL

Требование состоит в том, что пользователь может написать статью, поэтому я выбираю тип 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 является фактическим типом, но, к сожалению, этого не существует

4b9b3361

Ответ 1

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

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

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

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

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

Ссылки

  • Спецификация JPA 1.0:
    • Раздел 9.1.19 "Аннотации Лоб"

Ответ 2

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

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

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

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

Для columnDefinition также полезно читать это.

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

Ответ 3

для mysql 'text':

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

для mysql 'longtext':

@Lob
private String description;