我使用 Hyperjaxb3 从 XSD 模式生成 JPA 实体。我有一个要用于描述文本(UI 中的文本区域)的 xsd:string 类型:
<xsd:complexType name="Description">
<xsd:simpleContent>
<xsd:extension base="**xsd:string**">
<xsd:attribute name="abc" type="xsd:NCName" use="optional" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
Hyperjaxb3 生成带有属性值的类(实体)描述,注释如下:
@Basic
@Column(name = "VALUE_", **length = 255**)
public String getValue() {
return value;
}
我的问题:
我看到如果我对 xsd:simpleType 设置 xsd:maxLength 限制,JPA @Column.length 的值为 maxLength。如何在 xsd:simpleContent 上设置 xsd:recriction,即 xsd:xsd:string 的扩展?我是否必须使用我将扩展的 xsd:restriction 定义一个 complexType?如果是,Hyperjaxb 会根据我的限制生成@Column.length。我试过以下:
<xsd:simpleType name="DescriptionParent">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="4096" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="Description">
<xsd:simpleContent>
<xsd:extension base="DescriptionParent">
<xsd:attribute name="abc" type="xsd:NCName" use="optional" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
但是 JPA 的列长度仍然是 255。
是否也可以在我的 JAXB 自定义(*.xjb 文件)中为给定类型设置列的长度(不知何故让 hyperjaxb 知道这是我想用于我的特定类型的 orm)?或者它完全不碍事,应该使用 xsd:maxLength(上图)我设法为 Hyperjaxb 定制全局设置它:
谢谢你的帮助。