为什么SQL Server时间戳类型在hibernate中映射为二进制类型?

Sun*_*mar 1 java sql-server hibernate reverse-engineering hibernate-tools

我在Mssql中有一个列类型为TimeStamp的表,并使用hibernate(逆向工程)生成了pojo。在生成的Pojo中,时间戳字段被标记为byte []。

在调试过程中,我发现TimeStamp sqlType代码为“-2”,即Hibernate类型中的Binary Type,Hibernate二进制类型相当于java中的byte[]。

Java、hibernate 和 sql server 的时间戳数据类型

 Mssql                 Hibernate             Java Type
 -----                 ---------             ---------

Timestamp               Binary                 byte[]
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在 Hibernate 中只有 mssql 类型的 TimeStamp 与 Binary 映射。但在其他数据库中,如 Postgres、oracle、mysql...timestamp 被映射到 hibernate 时间戳类型。

我可以通过将 sql 时间戳映射到 hibernate 时间戳来在 hibernate.reveng.xml 中添加类型映射来解决此问题。不知道进一步还会出现什么问题。

Sun*_*mar 5

看来MSSQL时间戳与所有其他数据库时间戳类型不同。

SQL Server 时间戳是二进制数字,指示数据库中数据修改发生的相对顺序。时间戳数据类型最初是为了支持 SQL Server 恢复算法而实现的。

SQL Server TIMESTAMP 值不包含任何日期或时间相关值。它不依赖于系统日期。事实上,它包含二进制格式字符串来表示表中行的版本。这就是为什么它也被称为 ROWVERSION。另外,ROWVERSION 是 SQL Server 中的关键字,其行为与 TIMESTAMP 相同。

因此,Hibernate 将 sql server 时间戳类型映射到二进制类型。