Отношения JPA @ManyToMany с дополнительным столбцом не работают @OneToMany - PullRequest
0 голосов
/ 31 марта 2019

У меня есть отношения ManyToMany с дополнительным полем, и мне нужно, чтобы при получении любого из отношений с конца я мог получить список ваших отношений.Весна 2.1.3

Я пробовал много уроков и других вопросов на этом сайте, но не могу заставить его работать.У меня есть другой подобный проект, с равными отношениями, и он отлично работает.

EER:

https://i.ibb.co/MCLMWqW/Capture.jpg

Envio Entity:

@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

@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

@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": []
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...