简体   繁体   English

自定义hyperjaxb3生成实体的表名?

[英]Customize table name of hyperjaxb3 generated entity?

I'm having an xml schema where have simpleType( diagnosisCode ) as shown below:我有一个XML模式,其中具有的simpleType(diagnosisCode)如下所示:

<xsd:complexType name="MedicalClaimDetail">
    <xsd:element name="diagnosisCode" minOccurs="1" maxOccurs="99">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:minLength value="1"/>
                <xsd:maxLength value="30"/>
            </xsd:restriction>
        </xsd:simpleType>   
    </xsd:element>
</xsd:complexType>

This has generated a top level class with one-to-many relation ship to a child class as:这生成了一个与子类具有一对多关系的顶级类,如下所示:

A parent class with original property and a transient property to hyperjaxb generated class:具有原始属性的父类和 hyperjaxb 生成的类的瞬态属性:

@Entity(name = "MedicalClaimDetail")
@Table(name = "A_ES_MED_CLM_DETAIL")
@Inheritance(strategy = InheritanceType.JOINED)
public class MedicalClaimDetail
    implements Serializable, Equals, HashCode
{

    private final static long serialVersionUID = 1L;
    @XmlElement(required = true)
    protected List<String> diagnosisCode;

    protected transient List<MedicalClaimDetailDiagnosisCodeItem> diagnosisCodeItems;

    @Transient
    public List<String> getDiagnosisCode() {
        if (diagnosisCode == null) {
            diagnosisCode = new ArrayList<String>();
        }
        return this.diagnosisCode;
    }

    public void setDiagnosisCode(List<String> diagnosisCode) {
        this.diagnosisCode = diagnosisCode;
    }

    @OneToMany(targetEntity = MedicalClaimDetailDiagnosisCodeItem.class, cascade = {
        CascadeType.ALL
    })
    @JoinColumn(name = "DIAGNOSISCODEITEMS_MEDICALCL_0")
    public List<MedicalClaimDetailDiagnosisCodeItem> getDiagnosisCodeItems() {
        if (this.diagnosisCodeItems == null) {
            this.diagnosisCodeItems = new ArrayList<MedicalClaimDetailDiagnosisCodeItem>();
        }
        if (ItemUtils.shouldBeWrapped(this.diagnosisCode)) {
            this.diagnosisCode = ItemUtils.wrap(this.diagnosisCode, this.diagnosisCodeItems, MedicalClaimDetailDiagnosisCodeItem.class);
        }
        return this.diagnosisCodeItems;
    }

    public void setDiagnosisCodeItems(List<MedicalClaimDetailDiagnosisCodeItem> value) {
        this.diagnosisCode = null;
        this.diagnosisCodeItems = null;
        this.diagnosisCodeItems = value;
        if (this.diagnosisCodeItems == null) {
            this.diagnosisCodeItems = new ArrayList<MedicalClaimDetailDiagnosisCodeItem>();
        }
        if (ItemUtils.shouldBeWrapped(this.diagnosisCode)) {
            this.diagnosisCode = ItemUtils.wrap(this.diagnosisCode, this.diagnosisCodeItems, MedicalClaimDetailDiagnosisCodeItem.class);
        }
    }

Child class as:子类为:

@XmlAccessorType(XmlAccessType.FIELD)
@Entity(name = "MedicalClaimDetailDiagnosisCodeItem")
@Table(name = "MEDICALCLAIMDETAILDIAGNOSISC_0")
@Inheritance(strategy = InheritanceType.JOINED)
public class MedicalClaimDetailDiagnosisCodeItem
    implements Serializable, Item<String>
{

    private final static long serialVersionUID = 1L;
    @XmlElement(name = "diagnosisCode", namespace = "http://vo.edge.fm.cms.hhs.gov")
    protected String item;
    @XmlTransient
    protected Long hjid;

    @Basic
    @Column(name = "ITEM", length = 30)
    public String getItem() {
        return item;
    }

    public void setItem(String value) {
        this.item = value;
    }

    @Id
    @Column(name = "HJID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getHjid() {
        return hjid;
    }

    public void setHjid(Long value) {
        this.hjid = value;
    }

}

Now the question: Is there a way to customize the table name of the auto-generated entity : MedicalClaimDetailDiagnosisCodeItem which is hyperjaxb generated table name as MEDICALCLAIMDETAILDIAGNOSISC_0现在的问题是:有没有办法自定义自动生成实体的表名: MedicalClaimDetailDiagnosisCodeItem ,它是 hyperjaxb 生成的表名作为 MEDICALCLAIMDETAILDIAGNOSISC_0

How can we achieve that?我们怎样才能做到这一点?

I got this resolved.我解决了这个问题。 See the code below to customize the table name of generated entity/class using external binding:请参阅下面的代码以使用外部绑定自定义生成的实体/类的表名:

    <jaxb:bindings
        schemaLocation="xsd/medicalClaim/MedicalClaimDetail.xsd"
        node="/xs:schema">

        <jaxb:bindings
            node="xs:complexType[@name='MedicalClaimDetail']//xs:element[@name='diagnosisCode']">
            <hj:generated-class
                className="MedicalClaimDetailDiagnosisCodeItem">
                <hj:entity>
                    <orm:table name="A_ES_MED_CLM_DTL_DG_CD_ITM" />
                </hj:entity>
            </hj:generated-class>
        </jaxb:bindings>

    </jaxb:bindings>

HJ3 has a lot of cutomization options. HJ3 有很多自定义选项。

For examples, see the following project:例如,请参见以下项目:

https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/cu-one/src/main/resources https://github.com/highsource/hyperjaxb3/tree/master/ejb/tests/cu-one/src/main/resources

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM