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

3 60

3 ответа:

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

9.1.19 Lob Аннотация

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

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

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

ссылки

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

С @Lob Я всегда заканчиваю с LONGTEXTв MySQL.

и TEXT Я заявляю это таким образом (JPA 2.0):

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

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

на columnDefinition это также хорошо, чтобы читать этой.

EDIT: Пожалуйста, обратите внимание на Adam Siemions комментарий и проверьте компонент database engine, который вы используете, перед применением columnDefinition = "TEXT".

для mysql 'text':

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

для mysql 'longtext':

@Lob
private String description;