Хорошо, я пробовал это несколько дней подряд, но не могу понять, что не так. Основная идея здесь заключается в том, что я пытаюсь создать спокойный веб-сервис, который будет отображать свойства двух компонентов сущностей, имеющих множество двунаправленных отношений друг с другом. Теперь я хочу использовать moxy-реализацию JAXB, чтобы воспользоваться аннотацией @XmlInverseReference для поддержания ссылочной целостности, но продолжаю придумывать исключения. ниже приведено исключение из моих классов. Я использую стеклянную рыбу 3.1.1 и moxy eclipselink 2.3.0.
Passenger Class:
package kharesoft.sita;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.persistence.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlType(propOrder = {"id", "firstName", "lastName", "boardingNo", "seatNo", "flightNo", "dateOfFlight", "bags"})
@Entity
@NamedQuery(name = "findPaxByBagTag", query = "select p from Passenger p,IN (p.bags) b where b.bagTagNo=:bagTagNo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Passenger implements Serializable {
@XmlElement
private String firstName;
@XmlElement
private String lastName;
@XmlElement
private String boardingNo;
@XmlElement
private String seatNo;
@XmlElement
private String flightNo;
@XmlElement
@Temporal(javax.persistence.TemporalType.DATE)
private Date dateOfFlight;
@XmlElementWrapper
@XmlElements({
@XmlElement(name = "bagtag")})
@OneToMany(mappedBy = "passenger")
private Set<Bag> bags;
private static final long serialVersionUID = 1L;
@XmlElement
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Set<Bag> getBags() {
return bags;
}
public void setBags(Set<Bag> bags) {
this.bags = bags;
}
//Remaining getters and setters not shown
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Passenger)) {
return false;
}
Passenger other = (Passenger) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "kharesoft.sita.Passenger[ id=" + id + " ]";
}
}
Bag Class:
package kharesoft.sita;
import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlInverseReference;
@XmlRootElement
@Entity
@NamedQuery(name = "findBagWithTagNo", query = "select b from Bag b where b.bagTagNo=:bagTagNo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Bag implements Serializable {
private static final long serialVersionUID = 1L;
@XmlElement
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@XmlElement
private String bagTagNo;
@XmlElement
@ManyToOne
private Passenger passenger;
//other getters and setters not shown
@XmlInverseReference(mappedBy = "bags")
public Passenger getPassenger() {
return passenger;
}
public void setPassenger(Passenger passenger) {
this.passenger = passenger;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Bag)) {
return false;
}
Bag other = (Bag) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return bagTagNo;
}
}
Исключение:
Элементы вашего экрана скрыты от просмотра. Нажмите Esc или переместите указатель в центр экрана, чтобы вернуться в Почту. Нажмите Esc или переместите указатель сюда, чтобы вернуться в Mail.от on от WineSo свежее и такое чистое. ВсеФотоЦвет
Поскольку вы указали
Passenger Class:
package kharesoft.sita;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.persistence.*;
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlType(propOrder = {"id", "firstName", "lastName", "boardingNo", "seatNo", "flightNo", "dateOfFlight", "bags"})
@Entity
@NamedQuery(name = "findPaxByBagTag", query = "select p from Passenger p,IN (p.bags) b where b.bagTagNo=:bagTagNo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Passenger implements Serializable {
@XmlElement
private String firstName;
@XmlElement
private String lastName;
@XmlElement
private String boardingNo;
@XmlElement
private String seatNo;
@XmlElement
private String flightNo;
@XmlElement
@Temporal(javax.persistence.TemporalType.DATE)
private Date dateOfFlight;
@XmlElementWrapper
@XmlElements({
@XmlElement(name = "bagtag")})
@OneToMany(mappedBy = "passenger")
private Set<Bag> bags;
private static final long serialVersionUID = 1L;
@XmlElement
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Set<Bag> getBags() {
return bags;
}
public void setBags(Set<Bag> bags) {
this.bags = bags;
}
//Remaining getters and setters not shown
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Passenger)) {
return false;
}
Passenger other = (Passenger) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "kharesoft.sita.Passenger[ id=" + id + " ]";
}
}
Bag Class:
package kharesoft.sita;
import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlInverseReference;
@XmlRootElement
@Entity
@NamedQuery(name = "findBagWithTagNo", query = "select b from Bag b where b.bagTagNo=:bagTagNo")
@XmlAccessorType(XmlAccessType.FIELD)
public class Bag implements Serializable {
private static final long serialVersionUID = 1L;
@XmlElement
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@XmlElement
private String bagTagNo;
@XmlElement
@ManyToOne
private Passenger passenger;
//other getters and setters not shown
@XmlInverseReference(mappedBy = "bags")
public Passenger getPassenger() {
return passenger;
}
public void setPassenger(Passenger passenger) {
this.passenger = passenger;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Bag)) {
return false;
}
Bag other = (Bag) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return bagTagNo;
}
}
в классе _2_, вы должны переместить аннотацию _3_ в поле. Поскольку оно находится в свойстве, MOXy думает, что вы хотите отобразить и поле, и свойство, и жалуется, потому что они оба имеют одно и то же имя.