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

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

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

Ответы на вопрос(3)

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

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

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

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

ЗаcolumnDefinition это тоже хорошо читатьэтот.

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

 silentsudo01 апр. 2019 г., 14:17
Помоги мне, спасибо!
 Adam Siemion01 сент. 2014 г., 12:01
Это не очень хорошее решение, так как столбец данных TEXT доступен не во всех механизмах баз данных, например HSQLDB, подробности:stackoverflow.com/questions/4213782/...
 Nicholas DiPiazza10 янв. 2015 г., 21:48
это то, что я хотел, потому что это то, что доступно во всех производственных базах данных, и не имеет проблемы с «длинным текстом», когда я этого не хочу.
Решение Вопроса

Поскольку вы используете 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 «Аннотация аннотации»
 gerrytan18 апр. 2013 г., 02:22
На Hibernate JPA MYSQL, используя@Lob плюс@Column аннотация в поле String дает «неправильный тип столбца, ожидаемый длинный текст, но тип столбца - текст». Но проблема решена, когда я использовал@Column(columnDefinition = "text")
 yanni09 июн. 2018 г., 01:35
У меня был двоичный тип столбца, и@Lob аннотация не работает для меня. Тем не мение,@Column(length=8192) работал отлично и решил мою проблему.
 Socrates06 мар. 2017 г., 16:07
Какой смысл объединять@Lob а также@Column(length=512)? Почему бы просто не быть счастливым с@Lob? Оба не имеют значения при использовании Hibernate JPA MySQL. Оба результата в типе поля MySQLlongtext.

для mysql 'текст':

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

для mysql 'longtext':

@Lob
private String description;

Ваш ответ на вопрос