JPA:如何将String保存到数据库字段中,键入MYSQL Text

时间:2010-10-05 21:59:05

标签: java mysql orm jpa

要求是用户可以撰写文章,因此我为mysql数据库中的Text字段选择content类型。如何将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 个答案:

答案 0 :(得分:119)

由于您正在使用JPA,请使用Lob注释(以及可选的Column注释)。以下是JPA规范对此的说法:

  

9.1.19 Lob Annotation

     

Lob注释指定a   持久性属性或字段应该是   坚持作为一个大对象   数据库支持的大对象类型。   便携式应用程序应该使用   映射到a时的Lob注释   数据库Lob类型。 Lob注释   可以与。一起使用   Basic注释。 Lob可能是   二进制或字符类型。该   Lob类型是从类型推断出来的   持久字段或属性,以及   除了字符串和基于字符   类型默认为Blob。

所以声明如下:

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

参考

  • JPA 1.0规范:
    • 第9.1.19节“Lob注释”

答案 1 :(得分:83)

使用@Lob我总是在MySQL中使用LONGTEXT

要获得TEXT我这样声明(JPA 2.0):

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

更好地找到它,因为我可以直接选择列在数据库中的文本类型。

对于columnDefinition,也可以阅读this

编辑:在应用columnDefinition = "TEXT"之前,请注意Adam Siemions comment并检查您正在使用的数据库引擎。

答案 2 :(得分:14)

for mysql' text':

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

for mysql' longtext':

@Lob
private String description;