Wymagane jest, aby użytkownik mógł napisać artykuł, dlatego wybieram typ Text
dla content
pola w bazie danych mysql. Jak mogę zamienić się Java String
naMySQL Text
Proszę bardzo 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
}
W mojej bazie danych MYSQL content
jest typ Text
. Miałem nadzieję, że będzie coś takiego java.sql.Text
, ponieważ java.sql.Blob
jest to rzeczywisty typ, ale niestety, którego nie ma
@Lob
plus@Column
w polu String daje „niewłaściwy typ kolumny, oczekiwany długi tekst, ale typ kolumny to tekst”. Ale problem został rozwiązany, gdy użyłem@Column(columnDefinition = "text")
@Lob
i@Column(length=512)
? Dlaczego nie być po prostu szczęśliwym@Lob
? Oba nie mają znaczenia przy korzystaniu z Hibernate JPA MySQL. Oba dają w wyniku typ pola MySQLlongtext
.@Lob
adnotacja nie działała. Jednak@Column(length=8192)
zadziałało świetnie i rozwiązało mój problem.Z
@Lob
I zawsze kończy się zLONGTEXT
MySQL.Aby uzyskać
TEXT
, deklaruję to w ten sposób (JPA 2.0):@Column(columnDefinition = "TEXT") private String text
Znajdź to lepiej, ponieważ mogę bezpośrednio wybrać typ tekstu, który kolumna będzie miała w bazie danych.
Na
columnDefinition
to również dobre do czytania tego .EDYCJA: Prosimy o zwrócenie uwagi na komentarz Adama Siemionsa i sprawdzenie używanego silnika bazy danych przed złożeniem wniosku
columnDefinition = "TEXT"
.źródło
dla mysql 'text':
@Column(columnDefinition = "TEXT") private String description;
dla mysql 'longtext':
@Lob private String description;
źródło