Domanda

Non è possibile mappare xml a entità jpa usando JAXB?Eclipselink Moxy sarà utile?

È stato utile?

Soluzione

Nota: sono il EclipseLink JAXB (MOXy ) responsabile e un membro del JAXB 2 ( JSR-222) gruppo di esperti.

Sì, puoi mappare entità JPA a XML e i seguenti sono alcuni modi in cui EclipseLink JAXB (MOXy) lo rende più facile.

1. Mappature bidirezionali

<”Cliente

import javax.persistence.*;

@Entity
public class Customer {

    @Id
    private long id;

    @OneToOne(mappedBy="customer", cascade={CascadeType.ALL})
    private Address address;

}

<”Address

import javax.persistence.*;
import org.eclipse.persistence.oxm.annotations.*;

@Entity
public class Address implements Serializable {

    @Id
    private long id;

    @OneToOne
    @JoinColumn(name="ID")
    @MapsId
    @XmlInverseReference(mappedBy="address")
    private Customer customer;

}

Per ulteriori informazioni

2. Mappatura delle relazioni chiave composte

Normalmente pensiamo di mappare un albero di oggetti in XML, tuttavia JAXB supporta l'uso della combinazione di @XmlID / @XmlIDREF per mappare la relazione tra i nodi che rappresentano un grafico. Il meccanismo standard è una chiave, una chiave esterna. JPA supporta il concetto di chiavi composite, così come MOXy utilizzando @XmlKey e @XmlJoinNodes (simile a @XmlJoinColumns in JPA).

<”Dipendente

@Entity
@IdClass(EmployeeId.class)
public class Employee {

    @Id
    @Column(name="E_ID")
    @XmlID
    private BigDecimal eId;

    @Id
    @XmlKey
    private String country;

    @OneToMany(mappedBy="contact")
    @XmlInverseReference(mappedBy="contact")
    private List<PhoneNumber> contactNumber;

}

<

@Entity
public class PhoneNumber {

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="E_ID", referencedColumnName = "E_ID"),
        @JoinColumn(name="E_COUNTRY", referencedColumnName = "COUNTRY")
    })
    @XmlJoinNodes( {
        @XmlJoinNode(xmlPath="contact/id/text()", referencedXmlPath="id/text()"),
        @XmlJoinNode(xmlPath="contact/country/text()", referencedXmlPath="country/text()")
    })
    private Employee contact;

}

Per ulteriori informazioni

3. MOXy consente l'utilizzo di chiavi composite e incorporate

JPA può anche utilizzare classi di chiavi incorporate per rappresentare chiavi composite. MOXy supporta anche questo stile di chiavi composite.

Per ulteriori informazioni

4. EclipseLink JAXB (MOXy) ed EclipseLink JPA hanno concetti condivisi

EclipseLink fornisce implementazioni JAXB e JPA che condividono un nucleo comune. Ciò significa che condividono molti degli stessi concetti, ad esempio:

Metodi di accesso virtuale

EclipseLink supporta il concetto di proprietà virtuali. Ciò è utile quando si crea un'applicazione multi-tenant in cui si desiderano personalizzazioni per tenant. Questo concetto è supportato nelle implementazioni JPA e JAXB di EclipseLink.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top