(moxy) objetos de empacotamento jaxb e hibernação de proxy
Nos últimos dias, tentei dar suporte ao empacotamento / desempacotamento XML de um modelo Hibernate, usando o MOXy JAXB. Tentando fazer isso, encontrei um problema com objetos proxy do hibernates. Considere algo como:
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;
}
}
Tentei mapear esse código usando o MOXy JAXB da seguinte maneira:
@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;
}
}
Meu problema é que o hibernate instancia um objeto proxy do endereço obtido chamando getAddress () em um Usuário. Então, quando o JAXB tenta empacotar o objeto, ele não consegue descobrir que ele é realmente um CoolAddress que está tentando empacotar, o que faz com que as propriedades do CoolAddress não sejam empacotadas.
Pesquisei no Google / considerei as seguintes soluções possíveis:
De alguma forma, receba um retorno de chamada do JAXB, permitindo que eu substitua o objeto que está sendo empacotado por outro. Isso me permitiria obter o objeto real do proxy. Toque em todos os objetos no modelo que farão a hibernação buscar os objetos reais. Não consegui encontrar nenhuma maneira inteligente de fazer isso além de executar manualmente todas as propriedades não transitórias, o que é silencioso e tedios Defina o hibernate para usar a busca ansiosa na sessão em que estou organizando os modeloEstou procurando sugestões alternativas ou se uma das sugestões acima é possível (e fácil) de implementar. Qualquer ajuda é apreciada:).