使用 Hyperjaxb 在生成的 JPA 模型上设置列长度

Setting column length on generated JPA model with Hyperjaxb

在我当前的项目中,我需要处理一组包含一些财务信息的 XML 文件,然后,对这些数据执行一些复杂的查询以填充数据库模式。

那些 XML 文件是基于 XSD 的,我使用 Hyperjaxb3 maven 插件从中生成 JPA classes,一切似乎都运行良好。不幸的是,我发现并发布了即使在 Hyperjaxb 文档 Google 和此处 Google 和此处花费大量时间搜索后我也无法找到解决方案的问题。

这是 XML 文件的片段:

<metrics>
    <metric name="pi1" type="decimal" periodType="instant" creationDate="">
        <label xml:lang="es">Número de personal remunerado</label>
        <label xml:lang="en">Number of staff recipient</label> 
    </metric>
    <metric name="md2" type="monetary" periodType="duration" creationDate="">
        <label xml:lang="es">Importe devengado en el período actual (flujo)</label>
        <label xml:lang="en">Amount awarded in the current period (flow)</label>
    </metric>
</metrics>

此问题与 label 元素有关。它的XSD定义如下:

<xs:element name="label">
    <xs:complexType mixed="true">
        <xs:attribute ref="xml:lang"  use="required"/>
    </xs:complexType>
</xs:element>

生成的 java class 如下所示:

@XmlRootElement(name = "label")
@Entity(name = "Label")
@Table(name = "LABEL")
@Inheritance(strategy = InheritanceType.JOINED)
public class Label implements Serializable, Equals, HashCode {
    @XmlValue
    protected String content;

    ...

    @Basic
    @Column(name = "CONTENT")
    public String getContent() {
        return content;
    }

    @Basic
    @Column(name = "LANG")
    public String getLang() {
        return lang;
    }
}

我的问题是,如何定义 "content" 列的长度?目前,我一直在玩我的绑定文件

<jaxb:bindings node="//xs:element[@name='label']">
    <hj:basic>
        <orm:column length="1024"/>
    </hj:basic>
</jaxb:bindings>

但没有任何区别。哦,顺便说一句,如果可能的话,应该避免对XSD文件进行更改,因为它是由第三方提供的。

好的,正如承诺的那样,这就是答案。

免责声明:我是作者。

考虑您提议的示例 XSD:

<xs:element name="ten">
    <xs:complexType mixed="true">
        <xs:attribute name="label" type="xs:string"/>
    </xs:complexType>
</xs:element>

I've figured out自定义内容属性:

    <jaxb:bindings node="xs:element[@name='ten']/xs:complexType">
        <hj:basic name="content">
            <orm:column length="1024"/>
        </hj:basic>
    </jaxb:bindings>

但问题似乎是 XJC 将此自定义应用到 class 和 属性。 class 未确认该自定义。由于 XJC 对此非常严格,因此它失败了 0.6.0

I've added a fix for this in 0.6.1,但它还没有发布,所以你现在必须自行检查和构建,直到 0.6.1 发布(没有计划)还没有)。

ps。您可能会发现 this tutorial on pull requests 很有帮助。您在回购中进行了更改,但实际上并未向 发送 PR。