2015-07-20 146 views
1

我試圖用hyperjaxb3創建從三米的.xsd(C14054.xsd,C14054CodeLists.xsd & C14054DataTypes.xsd)available here關係模式,然後從XML <元帥數據 - > Java的< - >關係。hyperjaxb3:枚舉問題

hyperjaxb3在創建關係模式方面已經比我評估過的非常昂貴的商業工具做得更好 - 但我無法完全按照自己想要的方式去做Enum。

例如在C14054.xsd中, '提供者' 的元素引用 'RECID'

<xs:element name="Provider"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element ref="RECID" minOccurs="1" maxOccurs="1" /> 

這又是類型爲 'RECIDCodeType'

<xs:element name="RECID" type="RECIDCodeType" /> 

從C14054CodeLists.xsd

<xs:complexType name="RECIDCodeType"> 
<xs:simpleContent> 
    <xs:extension base="RECIDCodeContentType" /> 
</xs:simpleContent> 

它擴展了RECIDCodeContentType

<xs:simpleType name="RECIDCodeContentType"> 
<xs:restriction base="xs:string"> 
    <xs:enumeration value="14054"> 
    <xs:annotation> 
     <xs:documentation> 
     <Label>2014/15 AP student record</Label> 
     </xs:documentation> 
    </xs:annotation> 
    </xs:enumeration> 
</xs:restriction> 

  1. 枚舉類型在數據庫中作爲「查找表」與列「HJID」和「VALUE_」創建的。表的主鍵可能是VALUE_,而不是自動編號的HJID?

I.e.可以唯一有效的入口(在數據庫層)到Provider.RECID(我改變了bindings.xjb中的列名)是'14054'?

  1. 當模式創建時,Enum值是否可以保存到關係表中?

I.e.可以將14054作爲一行添加到數據庫中的Subpurposecodetype.VALUE_列中?

非常感謝任何人可以擺脫任何光!

+0

我現在沒有時間做完整的答案,但這裏有提示。 (1)你基本上想使用這個值作爲id。這應該可以用'hj:id'自定義。必須放置在值屬性 - 我認爲附加到'xs:simpleContent'。 (2)初始化數據庫不在範圍內。你必須自己定製DDL腳本。 – lexicore

+0

lexicore - 你是真正的男人之王! – pieman

+0

1)我以爲我曾試過的每一個可能的位置,可能工作 - 但顯然不是! 你的保證,這是可能的,我需要有另一個裂縫,並得到它!我將在下面發佈完整答案。 2)不用擔心。我們還提供了枚舉/查找值的.csv文件,因此填充生成的模式並不是什麼大不了的事情。 但是,如果你想將它添加到未來版本的hyperjaxb ...;) 非常感謝! hyperjaxb將爲我們節省很多時間。該項目是否接受捐贈? – pieman

回答

0

希望這將幫助一些人在未來(感謝lexicore指着我在正確的方向!):

嵌入式解決方案:

<xs:simpleType name="RECIDCodeContentType"> 
<xs:annotation> 
    <xs:appinfo> 
     <hj:id /> 
    </xs:appinfo> 
</xs:annotation> 
<xs:restriction base="xs:string"> 
    <xs:enumeration value="14054"> 
    <xs:annotation> 
     <xs:documentation> 
     <Label>2014/15 AP student record</Label> 
     </xs:documentation> 
    </xs:annotation> 
    </xs:enumeration> 
</xs:restriction> 

外部綁定文件解決方案, :

<jaxb:bindings schemaLocation="C14054CodeLists.xsd" node="/xs:schema"> 
    <!-- RECIDCodeType : Make VALUE Primary Key --> 
    <jaxb:bindings node="xs:simpleType[@name='RECIDCodeContentType']"> 
     <hj:id /> 
    </jaxb:bindings> 
</jaxb:bindings> 

結果:

@Id 
@Column(name = "VALUE_") 
public String getValue() { 
    return value; 
}