在我当前的项目中,我需要处理一组包含一些财务信息的XML文件,并在稍后对该数据执行一些复杂查询以填充数据库模式。使用Hyperjaxb在生成的JPA模型上设置列长度
这些XML文件是基于XSD的,我使用Hyperjaxb3 maven插件从它生成JPA类,一切似乎都正常工作。不幸的是,我发现和问题是,即使在Hyperjaxb文档,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>
问题是关系到标签元素。它的XSD定义如下:
<xs:element name="label">
<xs:complexType mixed="true">
<xs:attribute ref="xml:lang" use="required"/>
</xs:complexType>
</xs:element>
而生成的Java类看起来是这样的:
@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;
}
}
我的问题是,我该怎么定义“内容”一栏的长度是多少?目前,我一直玩我的绑定文件
<jaxb:bindings node="//xs:element[@name='label']">
<hj:basic>
<orm:column length="1024"/>
</hj:basic>
</jaxb:bindings>
但没有任何区别。哦,顺便说一句,如果可能的话,应该避免更改XSD文件,因为它是由第三方提供的。
作者在这里。下次直接询问SO,我正在看标签。您正朝着正确的方向努力,唯一的问题是 - 如何自定义混合内容属性。我会试一试并报告。你可以通过在这里提供样本来帮助你:https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/cu-one/src/main/resources – lexicore 2015-02-10 12:37:41
谢谢lexicore。按照建议创建PR。没有合并它只是为了避免任何问题(与Github一起工作的经验不多) – 2015-02-10 13:53:01