当前位置: 首页 > 面试题库 >

使用Oracle 10g时,Hibernate对浮点列进行模式验证的已知问题的最佳解决方法是什么?

许毅
2023-03-14
问题内容

我有几个带有双字段的Java类,这些都是通过Hibernate持久化的。例如,我有

@Entity
public class Node ...

  private double value;

当Hibernate
org.hibernate.dialect.Oracle10gDialect为Node表创建DDL时,它将value字段映射为“双精度”类型。

create table MDB.Node (... value double precision not null, ...

在Oracle中,“双精度”似乎是“浮点数”的别名。因此,当我尝试使用该org.hibernate.cfg.AnnotationConfiguration.validateSchema()方法验证数据库架构时,Oracle似乎将value列描述为“
float”。这将导致Hibernate抛出以下异常

org.hibernate.HibernateException: Wrong column type in DBO.ACL_RULE for column value. Found: float, expected: double precision

Hibernate的JIRA数据库中列出了非常相似的问题,即HHH-1961。我想避免做任何会破坏MySql,Postgres和Sql
Server支持的事情,因此扩展HHH-1961中Oracle10gDialect提到的变通办法似乎是最有希望的。但是扩展方言是我以前从未做过的事情,而且恐怕可能会遇到一些麻烦。不会破坏我们与MySql,Postgres和Sql
Server的兼容性的最佳解决方法是什么?


问题答案:

这是架构验证器的已知限制,请检查HHH-2315。因此,这里有三个选项(实际上是四个),但我想不要取消验证。要么:

  • 在Java级别使用a float代替double-但这可能不是一个选择。

  • org.hibernate.mapping.Table.validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo)为这种特殊情况添加补丁以添加特殊条件-这实际上不是一个明智的选择。

  • 扩展org.hibernate.dialect.Oracle10gDialect使其float用于SQL类型DOUBLE

    public class MyOracle10gDialect extends Oracle10gDialect {
    public MyOracle10gDialect() {
        super();
    }
    protected void registerNumericTypeMappings() {
        super.registerNumericTypeMappings();
        registerColumnType( Types.DOUBLE, "float" );
    }
    

    }

后面的选项看似安全,但是需要进行一些测试,以查看它是否不会带来任何回归。我没有查看Oracle的JDBC驱动程序代码,因此无法说出驱动程序级别的方式floatdouble precision不同之处。



 类似资料:
  • 因此,我有一个Javascript脚本,它在一个循环中将小的分数相加,它有可能将0.2加到0.1。然后,这个值被输入到另一个函数,但问题是,我需要0.3来精确输入,而不是0.3000000000000004。 什么是最简单的方法,以确保数字是正确和准确的。注意,它可能得到0.25+0.125等,被添加到简单的四舍五入到小数点1不会解决问题。 也有可能添加0.2+0.1000000000000000

  • 我遇到了一个问题。我的网页有一个控件。值更改后(通过选择不同的值),页面将刷新并呈现内容。 下面是我的代码: 第二部分:

  • 问题内容: 在没有信用卡号且没有其他信息的情况下,PHP中确定该号码是否为有效号码的最佳方法是什么? 现在,我需要可以与American Express,Discover,MasterCard和Visa一起使用的功能,但是如果它也可以与其他类型的功能一起使用,可能会有所帮助。 问题答案: 卡号验证分为三个部分: 模式 -是否与发行者模式(例如VISA /万事达卡等)匹配 CHECKSUM- 它是否

  • 本文向大家介绍IIS7.5 无法验证对路径问题的解决方法,包括了IIS7.5 无法验证对路径问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 我们用win7系统的IIS7.5发布网站时,很多人都不成功。可能会出现“无法验证对路径”的错误,本文提供解决办法 方法/步骤 1、我们添加好了物理路径和站点以后,点击右侧的基本设置 2、再点击测试设置 3、会发现测试不成功,提示:无法验证对路径,经过分

  • 这并不困难,但它让我质疑spring auth服务器是最好的选择,还是我应该使用Keycloak?