- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对以下技术没有太多背景,因此我们将不胜感激。如果有不清楚的地方,请随时提问。
我目前正在开展一个迁移项目,其中我们正在更新许多技术,包括:
现在,我们的应用程序已部署到 JBoss 4.x 上并使用 Hibernate 3.2.4.sp1。在旧的数据库中,我们有许多看起来像这样的自定义数据类型(抱歉,我很想将其放入表格格式,但我不知道如何放在这里......):
DDL 中的某些列使用自定义数据类型:
CREATE TABLE y (
our_column_name TYPE1,
...
);
当服务器启动时,我收到以下错误消息:
... javax.persistence.PersistenceException: org.hibernate.HibernateException: Wrong column type: our_column_name, expected: image
这不是旧设置中发生的情况。请注意,在我们定义的所有自定义数据类型中,只有 image 和 tinyint 的数据类型存在问题;其他的被识别并且不会抛出错误。
我们在 JConnect 驱动程序上运行了跟踪,看起来它正在检索正确的数据类型,这就是我现在关注 HibernateException 的原因。我看过几篇与此类似的帖子(发生在不同的数据库上),但基本上,他们给出了类似的解决方法:
像this one这样的网站,建议我们更改数据库表的列以使用基本数据类型而不是自定义数据类型。我们通过将 our_column_name 的数据类型更改为 image
来完成此操作。完成此操作并重新启动服务器后,错误就会消失。但是,它没有解释原因或导致问题的原因。
This建议使用 JPA 注释的 @Column(columnDefinition='image')
。我们也尝试过这个,但似乎对启动没有任何影响(即错误仍然发生)。
在与 #2 相同的链接中,建议扩展 SQL 方言。但是,我认为这是不可行的 - 只有 2 个自定义数据类型(image 和tinyint)似乎导致了我们的问题,所以这可能有点矫枉过正。
This site建议从 persistence.xml 中删除 hibernate.hbm2ddl.auto=validate
。尚未尝试此操作,因为我们需要进行验证。
改用数据类型“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));
但是,Hibernate 的 API 文档有点缺乏细节,所以我目前在追踪这一点时遇到了一些困难......
关于导致异常的原因有什么想法吗?如果它在旧版本中工作,想知道 Hibernate(或 Sybase)的哪些变化会导致这种情况?
This文档表明 Hibernate 已针对 Sybase 15.7 进行了测试,因此我不知道在哪里继续寻找。上面的#1 是最好的解决方法吗?如果是这样,为什么应该使用基本类型而不是自定义数据类型(这实际上会使自定义数据类型变得无用......)的任何想法
再次感谢!
编辑:
尝试了以下方法:
@Column(columnDefinition='my_custom_datatype')
,错误就会消失。hibernate.hbm2ddl.auto=validate
,错误就会消失。我真的怀疑这是一个 hibernate 问题......
最佳答案
这本质上类似于 this question on SO即上面查询中的代码中的 typesMatch
将为 false,因为 col
和 columnInfo
返回的值不同 - 一个返回基数datatype,另一个是返回自定义用户类型。
因此,为了解决这个问题,可以采取多种解决方法(我在上面的帖子中提到过)-
hibernate.hbm2ddl.auto=validate
。@Column(columnDefinition='my_custom_datatype')
。关于java - 预期 HibernateException : Wrong column type:x,:Sybase 上的 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26774193/
有谁知道查询上次重建 sybase 索引的日期的方法吗? 最佳答案 这似乎是唯一的方法,索引的创建日期: select name, id, crdate from sysindexes where i
我搜索了一段时间,无法得到答案。 为什么这不起作用? 更改表 mytable ALTER COLUMN 价格翻倍 最佳答案 语法不正确,Sybase 中没有 DOUBLE 数据类型。 所以,你可以这样
我想返回所有表及其旁边的计数。最快的方法是什么? 我知道在 Oracle 中,您可以执行以下操作,但不确定 Sybase: declare n number; begin for rec in
在 sql server 2012 中我使用 USE myDatabase; GO SELECT * FROM sys.objects WHERE type = 'U'; 是否可以在 sy
我在 sybase 上遇到这个问题。 update tst_table set col1 = 'abc ' 结果将是 abc Sybase 将自动消除空格。但是我正在迁移,因此无法手动添加空格。 最
我在 sybase 上遇到了这个问题。 update tst_table set col1 = 'abc ' 结果将是 abc Sybase 会自动消除空格。但是我正在迁移,所以我无法手动添加空格。
我的要求是使用syscolumn 和systable 系统表。通过使用这两个表,返回特定模式中的特定表。但是 systable 持有来自 3 个不同模式的相同表名,如何获取具有所需模式的表名? tab
我有一个带有标识列的表。它有 100 行。我截断了表格。现在,如果我插入身份值为 101 等的新记录。有人可以告诉我如何将身份重置为零。 最佳答案 您需要的 SQL 是: sp_chgattribut
我有一个连接到 Sybase 数据库的数据源。我需要在连接到数据库后执行身份验证语句 (SET TEMPORARY OPTION CONNECTION_AUTHENTICATION='Company.
我正在使用带有 TSQL 的 Sybase DB。 我可以查看我的数据库中的所有自定义数据类型,但是我看不到它们所包含的底层 native 数据类型(INT、VARCHAR、CHAR、...)。 我使
当我点击以下查询时,我得到 1 行 SELECT * FROM servers WHERE Node='abc_deeh32q6610007' 但是,当我点击以下查询时,选择了 0 行 SELECT
Sybase 12.5 我在生产中有一个现有的表,需要更改它的 PK int 列,以便自动填充 - 创建表时,最好将 ID 列创建为标识。此 ID 列是多个其他表中的外键,因此不能选择删除该表并重新开
我曾在 SQL Server 数据库上工作过。现在我必须在 Sybase 数据库上工作(使用 Squirrel 客户端)。此查询不起作用: DECLARE @tableName VARCHAR(500
我正在尝试检索我的 sybase DB 的 DB 大小。但是我在任何地方都得到了这个命令来查看 DB 大小,“ sp_spaceused ”。但是这个命令显示了所有信息以及 DB 大小。 下面是输出,
很久以前,我发现 bcp 只是一个小 C 程序,它调用 sybase 客户端 api 的特殊位来将大量数据移入数据库。它以速度的名义欺骗和抢断并跳过检查限制。 太好了,我全力以赴。 在 sybase
我正在尝试通过 Rapid Sql 在 Sybase15 数据库上运行查询。我收到错误消息,例如 -- Number (103) Severity (15) State (207) Server (s
我将 Sybase.Data.AseClient.dll 导入到我的 C# 项目中以连接到 sybase 数据库并查询类似这样的内容 private DataSet query(string jjop
Sybase 有一种应用程序通信方式"context" data - 例如应用程序的最终用户名等。 - 数据库连接 session 。上下文数据基本上只是一组键值对,通过 set_appcontext
我需要从 Ruby 连接到一个相当古老的 Sybase 数据库。 我最终使用了 jRuby,只是因为我无法通过任何方式从 MRI 连接到 Sybase 来工作;如果有一种方法可以实际工作并且不疯狂地为
我有以下 Perl 脚本: use strict; use warnings; use DBI; my $db_connect = 'dbi:Sybase:server=10.2.2.2\CATDB;
我是一名优秀的程序员,十分优秀!