cal*_*e16 2 java sybase hibernate
我对下面的技术没有太多背景知识,所以任何帮助都会受到赞赏.如果不清楚,请随时提问.
我目前正在开展一个迁移项目,我们正在更新一些技术,包括:
现在,我们的应用程序部署在JBoss 4.x上并使用Hibernate 3.2.4.sp1.在旧的DB中,我们有许多自定义数据类型看起来像这样(对不起,本来喜欢把它放在表格格式中,但我不知道如何在这里......):
我们的DDL中的某些列使用自定义数据类型:
CREATE TABLE y (
our_column_name TYPE1,
...
);
Run Code Online (Sandbox Code Playgroud)
服务器启动时,我收到以下错误消息:
... javax.persistence.PersistenceException:org.hibernate.HibernateException:错误的列类型:our_column_name,expected:image
这不是旧设置中发生的事情.请注意我们定义的所有自定义数据类型,只有那些带有image和tinyint的数据类型存在问题; 其他人被认可,并没有错误.
我们在JConnect驱动程序上运行了跟踪,看起来它正在检索正确的数据类型,这就是为什么我现在专注于HibernateException.我见过几个与此类似的帖子(发生在不同的DB上),但基本上,他们给出了类似的解决方法:
像这样的一个站点,建议我们改变DB表的列以使用基本数据类型而不是自定义数据类型.我们通过将our_column_name的数据类型更改为来完成此操作image.完成此操作并重新启动服务器后,错误就会消失.但是,它没有解释导致问题的原因或原因.
这建议使用JPA注释@Column(columnDefinition='image').我们也试过这个,但它似乎对启动没有任何影响(即错误仍然发生).
在与#2相同的链接中,建议扩展SQL Dialect.但是,我不认为这是可行的 - 只有2个自定义数据类型(图像和tinyint)似乎导致我们的问题,所以这可能是矫枉过正.
此站点建议hibernate.hbm2ddl.auto=validate从persistence.xml中删除.没有尝试过,因为我们需要验证到位.
请改用数据类型"LOB"
我也尝试检查Hibernate的代码,因为这里引发了异常 - org.hibernate.mapping.Table.validateColumns(Table.java:261)这几乎指向了这一行:
boolean typesMatch = (col.getSqlType(dialect, mapping).startsWith(columnInfo.getTypeName().toLowerCase())) || (columnInfo.getTypeCode() == col.getSqlTypeCode(mapping));
Run Code Online (Sandbox Code Playgroud)
但是,Hibernate的API文档有点缺乏细节,所以我现在在跟踪这个问题时遇到了一些困难......
什么导致异常的任何想法?如果它在旧版本中工作,那么想知道Hibernate(或者Sybase)的哪些变化会导致这种情况发生?
本文档表明Hibernate已针对Sybase 15.7进行了测试,因此我无法继续寻找.上面#1会是最好的解决方法吗?如果是这样,那么应该使用基本类型的任何想法而不是自定义数据类型(实质上,这会使自定义数据类型无效...)
再次感谢您!
编辑:
尝试以下方法:
@Column(columnDefinition='my_custom_datatype')使用,则错误消失.hibernate.hbm2ddl.auto=validate从persistence.xml中删除,则错误消失.我真的怀疑这是一个休眠问题......
| 归档时间: |
|
| 查看次数: |
9841 次 |
| 最近记录: |