(moxy) jaxb marshaling and hibernate proxy objects

В последние пару дней я пытался сделать поддержку маршалинга / демаршалинга XML модели Hibernate, используя MOXy JAXB. Пытаясь сделать это, я столкнулся с проблемой с прокси-объектами гибернации. Рассмотрим что-то вроде:

public class User {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "address")
    public Address getAddress() {
        return address;
    }
}

public abstract class Address {
    // Something
}

public class CoolAddress extends Address {
    public String getSomething() {
        return something;
    }
}

Я попытался отобразить этот код с помощью MOXy JAXB следующим образом:

@XmlAccessorType(XmlAccessType.NONE)
public class User {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "address")
    @XmlElement
    public Address getAddress() {
        return address;
    }
}

@XmlAccessorType(XmlAccessType.NONE)
@XmlSeeAlso(CoolAddress.class)
public abstract class Address {
    // Something
}

@XmlAccessorType(XmlAccessType.NONE)
public class CoolAddress extends Address {
    @XmlElement
    public String getSomething() {
        return something;
    }
}

Моя проблема в том, что спящий режим создает экземпляр прокси-объекта адреса, полученного путем вызова getAddress () для пользователя. Затем, когда JAXB пытается маршалировать объект, он не может определить, что это действительно классный адрес, который он пытается маршалировать, что приводит к тому, что свойства в CoolAddress не маршалируются.

Я поискал в Google / рассмотрел следующие возможные решения:

  • Каким-то образом получить обратный вызов от JAXB, позволяющий мне заменить маршалируемый объект другим. Это позволило бы мне получить реальный объект от прокси.
  • Коснитесь всех объектов в модели, чтобы спящий режим выбирал реальные объекты. Мне не удалось найти какой-либо умный способ сделать это, кроме ручного прогона всех непереходных свойств, что довольно утомительно.
  • Установите спящий режим для использования активной выборки в сеансе, в котором я маршалирую модели.

Я ищу альтернативные предложения, или если одно из вышеперечисленных предложений возможно (и легко) реализовать. Любая помощь приветствуется :).

6
задан Kasper Nielsen 27 July 2011 в 08:52
поделиться