我与其他字段有一个ManyToMany关系,我需要从两端获取任何关系时,我都可以获取您的关系列表。春天2.1.3
我在此站点上尝试了许多教程和其他问题,但无法使其正常运行。我还有另一个类似的项目,两者关系平等,而且效果很好。
EER:
https://i.ibb.co/MCLMWqW/Capture.jpg
Envio实体:
@Entity
@Table(name = "envio")
public class Envio implements Serializable {
private static final long serialVersionUID = 864312406817041498L;
@Id
private String idEnvio;
private String idConsulta;
private BigDecimal costoFinal;
private Time tiempoDemora;
@OneToOne
@JoinColumn(name = "idDestinatario")
private Destinatario destinatario;
@OneToMany(mappedBy = "estado")
private Set<EnvioEstado> estado = new HashSet<EnvioEstado>();
public Envio() {}
public Envio(String idEnvio, String idConsulta, BigDecimal costoFinal, Time tiempoDemora, Destinatario destinatario) {
this.idEnvio = idEnvio;
this.idConsulta = idConsulta;
this.costoFinal = costoFinal;
this.tiempoDemora = tiempoDemora;
this.destinatario = destinatario;
}
...
EnvioEstado实体
@Entity
@Table(name = "envio_estado")
public class EnvioEstado implements Serializable, Comparable<EnvioEstado> {
private static final long serialVersionUID = 3075291775072006046L;
@EmbeddedId
@JsonIgnore
private EnvioEstadoEmb id;
@ManyToOne
@MapsId("idEnvio")
@JsonIgnore
private Envio envio;
@ManyToOne
@MapsId("idEstado")
private Estado estado;
private String observacion;
private Timestamp fechaHora;
public EnvioEstado() {}
public EnvioEstado(EnvioEstadoEmb id, Envio envio, Estado estado, String observacion) {
this.id = new EnvioEstadoEmb(envio.getIdEnvio(), estado.getIdEstado());
this.envio = envio;
this.estado = estado;
this.observacion = observacion;
}
...
Estado实体
@Entity
@Table(name = "estado")
public class Estado implements Serializable {
private static final long serialVersionUID = -3631071990603502847L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idEstado;
private String descripcion;
@JsonIgnore
@OneToMany(mappedBy = "estado")
private Set<EnvioEstado> envio = new HashSet<EnvioEstado>();
public Estado() {}
public Estado(Long idEstado, String descripcion, Set<EnvioEstado> envios) {
this.idEstado = idEstado;
this.descripcion = descripcion;
this.envio = envios;
}
...
可嵌入
@Embeddable
public class EnvioEstadoEmb implements Serializable {
private static final long serialVersionUID = 3032026803867120556L;
private String idEnvio;
private Long idEstado;
public EnvioEstadoEmb() {}
public EnvioEstadoEmb(String idEnvio, Long idEstado) {
this.idEnvio = idEnvio;
this.idEstado = idEstado;
}
...
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((idEnvio == null) ? 0 : idEnvio.hashCode());
result = prime * result + ((idEstado == null) ? 0 : idEstado.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
EnvioEstadoEmb other = (EnvioEstadoEmb) obj;
if (idEnvio == null) {
if (other.idEnvio != null)
return false;
} else if (!idEnvio.equals(other.idEnvio))
return false;
if (idEstado == null) {
if (other.idEstado != null)
return false;
} else if (!idEstado.equals(other.idEstado))
return false;
return true;
}
我得到这个结果,estados为空:
{
"idEnvio": "e23ac2da-092f-4541-be0d-16edc8dbb72e",
"idConsulta": "JUSX-62571",
"costoFinal": 102123,
"tiempoDemora": "00:30:01",
"destinatario": {
"idDestinatario": 1,
"nombre": "Pedro",
"apellido": "Perez",
"email": "",
"telefono": "",
"direccion": {
"idDireccion": 1,
"direccion": "Salta",
"numero": 944,
"entreCalles": "Entre y Entre",
"codigoPostal": "1070",
"piso": 10,
"departamento": "B",
"observacion": "",
"rangoHorarioInicio": "10:00:00",
"rangoHorarioFin": "11:00:00",
"localidad": {
"idLocalidad": 1,
"nombreLocalidad": "Palermo",
"precioEnvio": 1000,
"provincia": {
"idProvincia": 1,
"nombreProvincia": "CABAM"
}
}
}
},
"estados": []
}