You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置hisrc-hyperjaxb移除Double字段@Column的precision与scale

解决Double类型字段@Column注解precision/scale导致的Hibernate报错问题

使用hisrc-hyperjaxb Maven插件结合krasa-jaxb-tools插件从XSD生成带JPA注解的实体类时,XSD中type="xs:double"的元素生成Double字段后,会自动带上包含precision和scale属性的@Column注解:

@Column(name = "SOURCE_RATIO", precision = 20, scale = 10)
public Double getSourceRatio() {
    return sourceRatio;
}

当启用spring.jpa.hibernate.ddl-auto=create自动生成数据库Schema时,会触发错误:java.lang.IllegalArgumentException: scale has no meaning for floating point numbers。以下是从根源解决问题的方案:

通过binding.xjc自定义绑定规则移除无效属性

1. 创建binding.xjc绑定文件

在项目src/main/resources目录下创建binding.xjc文件,针对xs:double类型自定义JPA列注解的生成逻辑:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
               xmlns:hj="http://hyperjaxb3.jvnet.org/ejb/schemas/customizations"
               xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
               jaxb:version="2.1"
               jaxb:extensionBindingPrefixes="hj orm">

    <!-- 批量匹配XSD中所有xs:double类型的元素和属性 -->
    <jaxb:bindings schemaLocation="你的XSD文件路径(如src/main/resources/your-schema.xsd)" node="/xs:schema">
        <!-- 处理double类型的元素 -->
        <jaxb:bindings node="//xs:element[@type='xs:double']">
            <hj:basic>
                <orm:column name="{@name}" /> <!-- 保留原字段名,无需手动修改 -->
            </hj:basic>
        </jaxb:bindings>
        <!-- 处理double类型的属性 -->
        <jaxb:bindings node="//xs:attribute[@type='xs:double']">
            <hj:basic>
                <orm:column name="{@name}" />
            </hj:basic>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>
  • 替换schemaLocation为你的实际XSD文件路径;
  • 使用{@name}可以自动继承XSD中定义的元素/属性名,无需逐个指定字段名。

2. 配置Maven插件引入绑定文件

在pom.xml的hisrc-hyperjaxb插件配置中,添加绑定文件的引用:

<plugin>
    <groupId>org.patrodyne.jvnet</groupId>
    <artifactId>hisrc-hyperjaxb3-ejb-plugin</artifactId>
    <version>你的插件版本号</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <bindingDirectory>src/main/resources</bindingDirectory>
        <bindingFiles>
            <bindingFile>binding.xjc</bindingFile>
        </bindingFiles>
        <!-- 保留原有其他配置 -->
    </configuration>
</plugin>

3. 重新生成实体类

执行Maven命令重新生成代码:

mvn clean generate-sources

生成后的Double类型字段的@Column注解将不再包含precision和scale属性:

@Column(name = "SOURCE_RATIO")
public Double getSourceRatio() {
    return sourceRatio;
}

临时规避方案(不推荐)

如果暂时无法调整绑定规则,可通过Hibernate配置忽略无效属性,在application.properties中添加:

spring.jpa.properties.hibernate.type.preferred_float_type=double

但此方案仅为临时 workaround,建议优先通过绑定文件从根源解决注解生成问题。

内容的提问来源于stack exchange,提问作者Alexey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:45:10