JPA关系@ManyToMany与额外的列不起作用@OneToMany

时间:2019-03-31 17:22:24

标签: java spring spring-boot jpa

我与其他字段有一个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": []
        }

0 个答案:

没有答案