[英]Hyperjaxb3: Create lookup table from enumeration element
我有一個xsd文件,其中包含帶有枚舉約束的元素:
<xs:complexType name="Request">
<xs:sequence>
<xs:element name="CommsAddress" type="xs:string" />
<xs:element name="CommsAddressType">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="EMAIL"/>
<xs:enumeration value="PHONE"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
...
我希望生成的Java類中的CommsAddressType
字段是帶有值EMAIL
和PHONE
的生成的枚舉。 反過來,我希望Hibernate使用CommsAddressType
表自動生成數據庫模式,該表包含兩行,值EMAIL
和PHONE
。 然后, Request
表可以使用CommsAddressTypeId
列簡單地引用它們。
目前,Hyperjaxb3使用類型為String
的CommsAddressType
字段生成我的Request
類:
@XmlElement(name="CommsAddressType")
protected String commsAddressType
並生成架構,以便Request
表具有VARCHAR
類型的CommsAddressType
列。 顯然,這將導致大量不必要的重復數據。
有什么方法可以實現我上面描述的內容? 另外,當我向客戶展示xsd時,如果可能的話,我希望避免在模式中包括任何jaxb或hyperjaxb標記。
免責聲明:我是Hyperjaxb的作者。
如果您使枚舉類型成為Java中的枚舉,Hyperjaxb將把它們作為枚舉而不是字符串處理。 為此,例如,您可以使用以下方法自定義簡單類型:
<jaxb:typesafeEnumClass/>
請參閱此示例 。
Hyperjaxb會將對應的屬性映射為@Enumerated
。
不,您不能生成查找表,但是可以自定義枚舉在數據庫中的映射方式。 例如,您可以將其映射為EnumType.ORDINAL
:
<hj:basic><orm:enumerated>ORDINAL</orm:enumerated></hj:basic>
實際上,使用枚舉,您實際上並不需要JPA查找表。 JPA將根據指定的EnumType
映射正確地映射枚舉。
但是您可能需要一個用於您自己目的的查找表-例如能夠在聯接的查詢中產生易於理解的值。
在這種情況下,我建議將枚舉映射為ORDINAL
,並在您自己的DDL腳本上添加查找表以及相應的外鍵。
是的,您可以在單獨的綁定文件(通常為bindings.xjb
)中進行所有描述的自定義操作,而不必在架構中直接進行。 在此處查看測試項目, 這里有很多示例。 只需在src/main/resources
目錄中查找*.xjb
文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.