[英]Remote Access To Jpa Entity
我目前正在使用由Java Web應用程序和C#客戶端應用程序組成的系統。 Web應用程序具有Java Web Service,該Java Web Service具有返回Program類的實體對象的方法:
@WebMethod(operationName = "getProgram")
public Program getProgram(@WebParam(name = "macAddress") String macAddress){
Device device = DeviceManager.getInstance().getDevice(macAddress);
if(device != null){
return device.getProgram();
}
return null;
}
此類型為Program的返回對象,具有許多屬性和關系:
@Entity
@Table(name = "PROGRAM", schema = "APP")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Program.getProgramsByWeather", query = "SELECT p FROM Program p WHERE p.weather = :weather")})
public class Program extends DbEntity implements Serializable {
private static final long serialVersionUID = 1L;
@JoinColumn(name = "LOGO_ID", referencedColumnName = "ID")
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch= FetchType.EAGER)
private Logo logo;
@JoinColumn(name = "WEATHER_ID", referencedColumnName = "ID")
@ManyToOne
private Weather weather;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "program", orphanRemoval = true)
private List<ProgramPlaylist> programPlaylistList = new ArrayList<>();
@OneToMany(cascade = CascadeType.ALL, mappedBy = "program", orphanRemoval = true)
private List<ProgramTicker> programTickerList = new ArrayList<>();
@Column(name = "UPDATED")
private boolean updated;
public Program() {
}
public Program(String name, AppUser owner) {
super(name, owner);
}
public Logo getLogo() {
return logo;
}
public void setLogo(Logo logo) {
this.logo = logo;
}
public Weather getWeather() {
return weather;
}
public void setWeather(Weather weather) {
this.weather = weather;
}
public boolean isUpdated() {
return updated;
}
public void setUpdated(boolean updated) {
this.updated = updated;
}
@XmlElement
public List<ProgramPlaylist> getProgramPlaylistList() {
return programPlaylistList;
}
@XmlElement
public List<ProgramTicker> getProgramTickerList() {
return programTickerList;
}
@Override
public String toString() {
return "Program[ id=" + getId() + " ]";
}
}
客戶端可以獲取此對象並訪問客戶端應用程序中的某些屬性,例如program.name,它是從DbEntity繼承的,但是當我嘗試調用類似的內容時:
program.logo.name
客戶端拋出NullReferenceException。 當我嘗試遍歷programPlaylistList ArrayList的元素時,會發生相同的異常。
我假設傳遞給客戶端的對象本身未完全加載。
我該如何解決此問題,請幫忙?!
編輯好,所以我打印出客戶端從服務獲得的XML響應,並正確填充了該響應,但是由於某些原因,沒有填充對象字段,並且大多數情況下為null。 為什么會這樣呢?
默認情況下,@OneToMany批注的獲取策略為LAZY ,是否嘗試過像@oneToOne字段中那樣將其指定給EAGER(fetch = FetchType.EAGER)?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.