我無法從我通過到一個寧靜Java客戶端的請求收到的實體檢索一對多列集合:一對多列返回空集合
Itinerary itinerary = port.checkItinerary_XML(Itinerary.class, from, to);
的行程對象已檢索其所有數據,但當我嘗試檢索其一對多列我只得到一個空的集合:
Collection<Route> routeCollection = itinerary.getRouteCollection();
我試圖偷懶,渴望fetchtype但既不工作。
行程實體(相關部分):
@Entity
@Table(name = "ITINERARY")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Itinerary.findAll", query = "SELECT i FROM Itinerary i"),
@NamedQuery(name = "Itinerary.findById", query = "SELECT i FROM Itinerary i WHERE i.id = :id"),
@NamedQuery(name = "Itinerary.findByStartCity", query = "SELECT i FROM Itinerary i WHERE i.startCity = :startCity"),
@NamedQuery(name = "Itinerary.findByEndCity", query = "SELECT i FROM Itinerary i WHERE i.endCity = :endCity")})
public class Itinerary implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "ID")
private Integer id;
@OneToMany(fetch=FetchType.LAZY,cascade = CascadeType.ALL, mappedBy = "itineraryId")
private Collection<Route> routeCollection= new ArrayList();
public Itinerary() {
}
public Itinerary(Integer id) {
this.id = id;
}
@XmlTransient
@JsonIgnore
public Collection<Route> getRouteCollection() {
return routeCollection;
}
public void setRouteCollection(Collection<Route> routeCollection) {
this.routeCollection = routeCollection;
}
路線實體(僅相關部分):
@Entity
@Table(name = "ROUTE")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Route.findAll", query = "SELECT r FROM Route r"),
@NamedQuery(name = "Route.findById", query = "SELECT r FROM Route r WHERE r.id = :id"),
@NamedQuery(name = "Route.findByFromCity", query = "SELECT r FROM Route r WHERE r.fromCity = :fromCity"),
@NamedQuery(name = "Route.findByToCity", query = "SELECT r FROM Route r WHERE r.toCity = :toCity")})
public class Route implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "ID")
private Integer id;
@JoinColumn(name = "ITINERARY_ID", referencedColumnName = "ID")
@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL,optional = false)
private Itinerary itineraryId;
public Route() {
}
public Route(Integer id) {
this.id = id;
}
public Itinerary getItineraryId() {
return itineraryId;
}
public void setItineraryId(Itinerary itineraryId) {
this.itineraryId = itineraryId;
}
}
編輯:寧靜的行程客戶端處理checkItinerary_XML電話:
public class ItineraryClient {
private WebTarget webTarget;
private Client client;
private static final String BASE_URI = "http://localhost:8080/id2208_hw3_server/webresources";
public <T> T checkItinerary_XML(Class<T> responseType, String departureCity, String destinationCity) throws ClientErrorException {
WebTarget resource = webTarget;
resource = resource.path(java.text.MessageFormat.format("checkItinerary/{0}/{1}", new Object[]{departureCity, destinationCity}));
return resource.request(javax.ws.rs.core.MediaType.APPLICATION_XML).get(responseType);
}
好吧,getter用XmlTransient和JsonIgnore註釋,所以無論它是序列化爲XML還是JSON,編組器都會忽略該集合。 –
你可以告訴我們你實際上檢索'Itinerary itinerary = port.checkItinerary_XML(Itinerary.class,from,to);'和'Collection routeCollection = itinerary.getRouteCollection();'的代碼嗎? –
idipous
@JB Nizet我試圖刪除它,但後來我得到了port.checkItinerary調用的內部服務器錯誤。我應該如何處理它? –