我在使用Hibernate 3和ojdbc7.jar的Tomcat 7上的应用程序中有一个非常奇怪的错误: 在当前版本中,DB列已更改为CLOB,并按以下方式配置:
@Column(name = "BESCHREIBUNG")
@Length(min = 0, max = 4000)
@NotNull
@Lob
public String getBeschreibung() {
这在我的本地环境(Oracle 11g XE)和测试环境(Oracle 12)中完全正常,但是在prelive环境(Oracle 12)中,我在应用程序启动期间收到以下错误:
org.hibernate.HibernateException: Wrong column type in XXXX.MYTABLE for column BESCHREIBUNG. Found: clob, expected: varchar2(4000 char)
at org.hibernate.mapping.Table.validateColumns(Table.java:283)
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1343) at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:378)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
有关此的任何提示吗? 我已经检查了tomcat的/ lib - 目录,如果有一个过时的ojdbc或hibernate jar,没有成功。
答案 0 :(得分:9)
添加列定义以解决此问题。
@Column(name = "entity_value", columnDefinition="clob")
答案 1 :(得分:1)
根据消息,他仍然期待varchar2
。如果他找到@Lob
,他会期待一个clob,我猜你没有将代码更改部署到 prelive 环境中(至少没有成功)。
答案 2 :(得分:-1)
我只是删除了@Length(...)
,它的作用就像一个超级按钮。