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