Moxy. генерировать JSON, не содержит ссылочный класс - PullRequest
1 голос
/ 11 февраля 2011

Я использовал Eclipselink MOXy для конвертации моего POJO (используя JPA) в json.и это работа.но у меня есть одна проблема.У меня есть pojo класс MAccount, содержащий много к одному отношению к классу MProduct.когда я конвертирую в json, результат показывает, что класс MAccount не входит в класс MProduct.

здесь моя реализация класса MAccount:

@XmlRootElement
@Entity
@Table(name="m_account")
public class MAccount extends BaseObject implements Serializable {
    private static final long serialVersionUID = UUID.randomUUID().getMostSignificantBits();

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @XmlID
    private Long id;

    @Column(name="account_id")
    private String accountId;

    @Column(name="card_number")
    private String cardNumber;

    //bi-directional many-to-one association to Product
    @ManyToOne
    @JoinColumn(name="m_product_id")
    @XmlIDREF
    private MProduct mProduct;

    public MCustomerAccount() {
    }   

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getAccountId() {
        return this.accountId;
    }

    public void setAccountId(String accountId) {
        this.accountId = accountId;
    }

    public MProduct getMProduct() {
        return this.mProduct;
    }

    public void setMProduct(MProduct mProduct) {
        this.mProduct = mProduct;
    }

    // Imlement base object method
    ...
}

здесь моя реализация класса MProduct:

@XmlRootElement
@Entity
@Table(name="m_product")
public class MProduct extends BaseObject implements Serializable {
    private static final long serialVersionUID = UUID.randomUUID().getMostSignificantBits();

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @XmlID
    private Long id;

    @Column(name="product_code")
    private String productCode;

    @Column(name="product_name")
    private String productName;

    //bi-directional many-to-one association to MAccount
    @OneToMany(mappedBy="mProduct") 
    @XmlInverseReference(mappedBy="mProduct")
    private Set<MAccount> mAccountList;

    public MProduct() {
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getProductCode() {
        return this.productCode;
    }

    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    public String getProductName() {
        return this.productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public Set<MAccount> getMAccountList() {
        return this.mAccountList;
    }

    public void setMAccountList(Set<MAccount> mAccountList) {
        this.mAccountList = mAccountList;
    }

    // Imlement base object method
    ...
}

И сгенерировать JSON из класса MAccount

{"MAccount":[
    {"@type":"mAccount","id":"6","accountId":"05866039901"},
    {"@type":"mAccount","id":"7","accountId":"25600036290"}]
}

там нет MProduct, правильный результат json должен быть таким, как показано ниже

{"MAccount":[
    {"@type":"mAccount","id":6,"accountId":"05866039901","MProduct":{"@type":"mProduct","productCode":"T01","productName":"Book"}},
   {"@type":"mAccount","id":7,"accountId":"25600036290","MProduct":{"@type":"mProduct","productCode":"T02","productName":"Pen"}}]
}

Кто-нибудь знает, как решить эту проблему

Спасибо Б4

1 Ответ

1 голос
/ 17 февраля 2011

Поскольку вы аннотируете поле, есть вероятность, что JPA еще не заполнил это поле из-за отложенной загрузки. Если вместо этого вы аннотируете свойство (получить / установить), вы все еще видите это поведение?

Для получения дополнительной информации о @XmlInverseReference см .:

...