В последние пару дней я пытался сделать поддержку маршалинга / демаршалинга 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 / рассмотрел следующие возможные решения:
Я ищу альтернативные предложения, или если одно из вышеперечисленных предложений возможно (и легко) реализовать. Любая помощь приветствуется :).