2015-09-24 18 views
2

我有用於通過Hyperjaxb3生成JPA對象的此XSD定義。基本上,我需要的是生成的類將使我能夠訪問列而不是實體。我希望能夠直接和不修改CASE_ID場通過實體在hyperjaxb3中將一對多關係標記爲不可更新或可插入

<?xml version="1.0" encoding="windows-1252" ?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:ws="http://www.sample.code/types" 
    targetNamespace="http://www.sample.code/types" 
    elementFormDefault="qualified"> 

    <xsd:complexType name="CaseType"> 
     <xsd:annotation> 
      <xsd:documentation> 
       Entity 1 
      </xsd:documentation> 
     </xsd:annotation> 
     <xsd:sequence> 
      <xsd:element name="id" type="xsd:integer" /> 
      <xsd:element name="description" type="xsd:string"/> 
      <xsd:element name="priority" type="xsd:boolean"/> 
      <xsd:element name="elements" type="ws:ElementType" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:element name="Case" type="ws:CaseType" /> 

    <xsd:complexType name="ElementType"> 
     <xsd:annotation> 
      <xsd:documentation> 
       Entity 2 
      </xsd:documentation> 
     </xsd:annotation> 
     <xsd:sequence> 
      <xsd:element name="id" type="xsd:integer" /> 
      <xsd:element name="creation_date" type="xsd:dateTime"/> 
      <xsd:element name="description" type="xsd:string"/> 
      <xsd:element name="element_type" type="xsd:string"/> 
      <xsd:element name="case" type="ws:CaseType" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:element name="Element" type="ws:ElementType" /> 
</xsd:schema> 

這是配置文件的一部分binding.xjb

<bindings node="xsd:complexType[@name='CaseType']"> 
     <bindings node=".//xsd:element[@name='id']"> 
      <hj:id> 
       <orm:generated-value strategy="AUTO"/> 
      </hj:id> 
     </bindings> 
     <bindings node=".//xsd:element[@name='elements']"> 
      <hj:one-to-many> 
       <orm:join-column name="CASE_ID"/> 
      </hj:one-to-many> 
     </bindings> 
    </bindings> 

    <bindings node="xsd:complexType[@name='ElementType']"> 
     <bindings node=".//xsd:element[@name='case']"> 
      <hj:many-to-one> 
       <orm:join-column name="CASE_ID"/> 
      </hj:many-to-one> 
     </bindings> 
     <bindings node=".//xsd:element[@name='id']"> 
      <hj:id> 
       <orm:generated-value strategy="AUTO"/> 
      </hj:id> 
     </bindings> 
    </bindings> 

這完美的作品。無論如何,這會產生一個這樣的領域。

/** 
* Obtient la valeur de la propriété case. 
* 
* @return 
*  possible object is 
*  {@link CaseType } 
*  
*/ 
@ManyToOne(targetEntity = CaseType.class, cascade = { 
    CascadeType.ALL 
}) 
@JoinColumn(name = "CASE_ID") 
public CaseType getCase() { 
    return _case; 
} 

/** 
* Définit la valeur de la propriété case. 
* 
* @param value 
*  allowed object is 
*  {@link CaseType } 
*  
*/ 
public void setCase(CaseType value) { 
    this._case = value; 
} 

我需要的是修改hyperjaxb配置能夠產生這樣的一種方式:

@ManyToOne(targetEntity = CriminalCaseType.class, cascade = { 
    CascadeType.ALL 
}) 
@JoinColumn(name = "CASE_ID", updatable = false, insertable = false) 
public CriminalCaseType getCase() { 
    return _case; 
} 

. 
. 
. 


@Basic 
@Column(name = "CASE_ID") 
public BigInteger getCaseId() { 
    return _caseId; 
} 

public BigInteger setCaseId(BigInteger value) { 
    this._caseId = value; 
} 

有人在此@JoinColumn(name = 「CASE_ID」,可更新=假,插入= FALSE)我無法弄清楚如何在我的binding.xjb文件來配置,所以我可以這樣定義

<xsd:complexType name="ElementType"> 
     <xsd:annotation> 
      <xsd:documentation> 
       Entity 2 
      </xsd:documentation> 
     </xsd:annotation> 
     <xsd:sequence> 
      <xsd:element name="id" type="xsd:integer" /> 
      <xsd:element name="case_id" type="xsd:integer" /> 
      <xsd:element name="creation_date" type="xsd:dateTime"/> 
      <xsd:element name="description" type="xsd:string"/> 
      <xsd:element name="element_type" type="xsd:string"/> 
      <xsd:element name="case" type="ws:CaseType" minOccurs="0" maxOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:element name="Element" type="ws:ElementType" /> 
我複雜的數據類型部分
+0

就是這樣。我怎樣才能將此評論標記爲解決方案?我不認爲我可以,我可以嗎?謝謝! –

回答

2

請嘗試:

<orm:join-column name="CASE_ID" updatable="false" insertable="false"/> 

this schema,它記錄了HJ3自定義模式。

免責聲明:我是Hyperjaxb3的作者。