JPA:如何将一个string持久化到数据库字段中,键入MYSQL Text
要求是用户可以写一篇文章,因此我select了在MySQL数据库内的content
字段中inputText
。 如何将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
types的。 我希望能有这样的java.sql.Text
,因为java.sql.Blob
是一个实际的types,但不幸的是,这并不存在
由于您使用的是JPA,请使用Lob
注释(以及可选的Column
注释)。 以下是JPA规范所说的内容:
9.1.19 Lob注解
Lob
注解指定持久性属性或字段应该作为大型对象持久保存到数据库支持的大对象types。 在映射到数据库Lobtypes时,便携式应用程序应该使用Lob
注释。 Lob注释可以与Basic
注释一起使用。 一个Lob可能是一个二进制或字符types。 Lobtypes是根据持久性字段或属性的types推断的,除了string和基于字符的types以外,默认为Blob。
所以宣布这样的事情:
@Lob @Column(name="CONTENT", length=512) private String content;
参考
- JPA 1.0规范:
- 第9.1.19节“注释”
使用@Lob
我总是在MySQL中使用LONGTEXT
。
为了得到TEXT
我这样声明(JPA 2.0):
@Column(columnDefinition = "TEXT") private String text
find更好的,因为我可以直接select哪个文本types的列将在数据库中。
对于columnDefinition
,阅读这个也很好。
编辑:请注意亚当Siemions 评论和检查您使用的数据库引擎,应用columnDefinition = "TEXT"
。
对于MySQL的“文本”:
@Column(columnDefinition = "TEXT") private String description;
对于mysql'longtext':
@Lob private String description;