HibernateException:发现:clob,预期:varchar2(4000)

时间:2015-09-22 15:58:56

标签: java hibernate tomcat clob ojdbc

我在使用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,没有成功。

3 个答案:

答案 0 :(得分:9)

添加列定义以解决此问题。

@Column(name = "entity_value", columnDefinition="clob")

答案 1 :(得分:1)

根据消息,他仍然期待varchar2。如果他找到@Lob,他会期待一个clob,我猜你没有将代码更改部署到 prelive 环境中(至少没有成功)。

答案 2 :(得分:-1)

我只是删除了@Length(...),它的作用就像一个超级按钮。