我的一个实体Machinery拥有一个String名为的属性notes。JPA 2-Hibernate会为我生成模式,在我的情况下,RDBMS是MySQL。
Machinery
String
notes
notes被创建为一VARCHAR(255)列,这是正确的。
VARCHAR(255)
用户开始创建记录,并且所有记录都能完美运行,但是随后一些用户收到了臭名昭著的Data too long for column "notes"错误。
Data too long for column "notes"
该字段没有足够的空间容纳用户的机器记录!好,没问题 让我们更改架构!
因此,我打开实体类并将属性更改为:
@Column(length=1000000) @Lob private String notes;
顺便persistence.xml说一句,我声明:
persistence.xml
<property name="hibernate.hbm2ddl.auto" value="update" />
重新启动应用程序后,我很高兴Hibernate将我的notes列更改为LONGTEXT(对我来说足够了)。
LONGTEXT
因此,我首先尝试使用应用程序创建新的“长期记录”记录,尽管LONGTEXT现在还是错误“数据太长” 。
然后,我尝试INSERT从MySQL命令行进行原始操作,并且可以正常工作!我可以在该字段中插入长注释!
INSERT
最后,我DROP在我的本地/分期DB模式的变化hibernate.hbm2ddl.auto中persistence.xml,以create和它的作品。
DROP
hibernate.hbm2ddl.auto
create
JPA仍然认为这是VARCHAR吗?它是否具有某种缓存或用于存储架构信息的某个位置?
VARCHAR
显然,我不能删除生产数据库。那么,我该怎么做才能重置或更改列类型?
我正在使用JBossAS7 JPA 2-Hibernate。
没有!我最终得到:-数据库备份-hbm2ddl => CREATE-DROP-hbm2ddl =>更新-数据库还原
疯!:(