簡體   English   中英

在 hyperjaxb3 中將一對多關系標記為不可更新或不可插入

[英]Marking a one-to-many relationship as not updatable or insertable in hyperjaxb3

我有這個 XSD 定義,用於通過 Hyperjaxb3 生成 JPA 對象。 基本上,我需要的是生成的類將使我能夠訪問列而不是實體。 我希望能夠直接修改CASE_ID字段而不是通過實體

<?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", updatable = false, insertable = 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" />

請嘗試:

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

請參閱此架構,它記錄了 HJ3 的自定義架構。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM