Java 对Jpa实体的远程访问
我目前正在开发一个由Java Web应用程序和C#client应用程序组成的系统。Web app具有Java Web服务,该服务具有返回程序类的实体对象的方法: 此程序类型的返回对象具有许多属性和关系:Java 对Jpa实体的远程访问,java,web-services,jpa,entity,remote-access,Java,Web Services,Jpa,Entity,Remote Access,我目前正在开发一个由Java Web应用程序和C#client应用程序组成的系统。Web app具有Java Web服务,该服务具有返回程序类的实体对象的方法: 此程序类型的返回对象具有许多属性和关系: @Entity @Table(name = "PROGRAM", schema = "APP") @XmlRootElement @NamedQueries({ @NamedQuery(name = "Program.getProgramsByWeather", query = "SELECT
@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() + " ]";
}
}
客户端抛出NullReferenceException。
当我尝试迭代ProgramPlaylist ArrayList的元素时,也会发生相同的异常
我假设传递给客户机的对象本身没有完全加载
我怎样才能解决这个问题,请帮忙
编辑
好的,所以我打印了客户机从服务获得的XML响应,并正确地填充了它,但由于某些原因,对象字段没有填充,并且大部分为空。
为什么会出现这种情况?默认情况下,@OneToMany注释的获取策略是,您是否尝试过将其指定为像@oneToOne字段(fetch=FetchType.EAGER)中那样的渴望?是的。实际上,@OneToOne fetchType是我试图测试它是否有效时留下的,但遗憾的是它没有。即使对于我指定fetchType=EAGER的字段,我仍然无法从logo读取属性。有人吗?我真的被困在这里了。。。
@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.logo.name