columnDefinition =“TEXT”适用于所有类型的数据库

时间:2013-02-28 12:45:54

标签: java jpa

本地我使用mysql,所以当我使用

 @Column(columnDefinition = "TEXT")

不幸的是,应用程序也必须在不同的数据库中运行,我还没有被告知哪些只是“根本”。

是否可以制作具有类似效果的东西,但是在大多数数据库中工作?我怎样才能实现它?

4 个答案:

答案 0 :(得分:15)

这样的事情:

@Lob
private String someString;

我认为它更便携,应该有效地生成TEXT或LONGTEXT数据类型。

答案 1 :(得分:2)

如果您使用@LOB,您将使用包含DISTINCT(http://ora-00932.ora-code.com/)的SQL的ORA-00932异常

我认为解决方案取决于字符串的字节大小。如果它< 4000字节,您可以尝试使用@Column(name =“...”,length = 4000)

我建议4000字节用于DB兼容性原因:

  • 在oracle Oracle 8到Oracle 11g中,类型VARCHAR2最大大小为4000(A4页面格式)
  • 在DB2 10 for z / OS中,键入VARCHAR max size为32704
  • 在SQL Server 2012中,键入TEXT max size为2,147,483,647字节

答案 2 :(得分:0)

我遇到了同样的问题,仅在application.properties上的MySQL Url中添加了一个参数即可解决该问题:

spring.datasource.url=jdbc:mysql://localhost:3306/database?jdbcCompliantTruncation=false

参数为jdbcCompliantTruncation = false

看起来像一个解决方法,但只有它可以解决...

答案 3 :(得分:0)

相似的问题我在将图像上传到mysql数据库 @Column(columnDefinition =“ TEXT”)时遇到错误。
您可以在postgresql和mysql数据库中使用。

我已经更改为

@Lob
@Column(name=imageFiie)
private String image;

注意: 使用PostgresSQL时,我们可能会定期需要存储任意长度的字符串。

为此,PostgreSQL提供了三种字符类型:

  1. CHAR(n)
  2. VARCHAR(n)
  3. TEXT。 不幸的是,TEXT类型不是SQL标准管理的类型的一部分。这意味着如果我们要在持久性实体中使用JPA批注,可能会遇到问题。

这是因为JPA规范使用了SQL标准。因此,它没有定义使用@Text批注来处理此类对象的简单方法。

幸运的是,我们有两种方法可以管理PostgreSQL数据库的TEXT数据类型:

我们可以使用@Lob批注 另外,我们也可以使用@Column批注,结合columnDefinition属性

相关问题