Java 对Jpa实体的远程访问

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

我目前正在开发一个由Java Web应用程序和C#client应用程序组成的系统。Web app具有Java Web服务,该服务具有返回程序类的实体对象的方法:

此程序类型的返回对象具有许多属性和关系:

@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