Trong vài ngày qua, tôi đã cố gắng hỗ trợ cho XML marshalling/unmarshalling của một mô hình Hibernate, sử dụng MOXy JAXB. Đang cố gắng để làm điều này, tôi đã gặp phải một vấn đề với các đối tượng proxy hibernates. xem xét cái gì đó như:(moxy) jaxb marshaling và hibernate proxy objects
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;
}
}
Tôi đã cố gắng để ánh xạ mã này sử dụng MOXY JAXB theo cách sau:
@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;
}
}
Vấn đề của tôi là ngủ đông mà instantiates một đối tượng proxy của địa chỉ thu được bằng cách gọi getAddress() trên một Người dùng. Sau đó, khi JAXB cố gắng sắp xếp đối tượng, nó không thể tìm ra rằng nó thực sự là một CoolAddress mà nó đang cố gắng sắp xếp, kết quả là các thuộc tính trong CoolAddress không được sắp xếp lại.
Tôi có googled/coi là giải pháp khả thi sau:
- Trong một cách nào đó nhận được một cuộc gọi lại từ JAXB, cho phép tôi thay thế các đối tượng được marshaled với người khác. Điều này sẽ cho phép tôi có được đối tượng thực sự từ proxy.
- Chạm vào tất cả các đối tượng trong mô hình sẽ làm cho việc chụp ảnh thực sự trở nên hibernate. Tôi đã không thể tìm thấy bất kỳ cách thông minh nào làm việc này ngoài việc chạy thủ công thông qua tất cả các thuộc tính không tạm thời, điều này thật tẻ nhạt.
- Đặt ngủ đông để sử dụng tính năng tìm nạp mong muốn trong phiên tôi sắp xếp các mô hình.
Tôi đang tìm đề xuất thay thế hoặc nếu một trong các đề xuất ở trên là có thể (và dễ) để triển khai. Bất kỳ trợ giúp được đánh giá cao :).
'CoolAddress' extend' Address'? –
Có, xin lỗi. Tôi đã quên viết điều đó. –