Problemas con las relacciones compuestas

Debate
Arturo
2012-03-05
2012-11-26
  • Arturo
    Arturo
    2012-03-05

    Hola a Todos,
    Tengo un problema con una referencia compuesta.Tengo la siguiente propiedad declarada

    @ManyToOne
        @JoinColumns({ 
            @JoinColumn(name="id_calibradora", referencedColumnName="idCalibradora"),
            @JoinColumn(name="cd_almacen", referencedColumnName="cdAlmacen")
        })
        private Calibradoras calibradora;
    

    Y una clase con la forma

    @Embeddable
    public class CalibradorasPk implements java.io.Serializable {
        @Column(name = "id_calibradora")
        private int idCalibradora;
        public int getIdCalibradora() {
            return idCalibradora;
        }
        public void setIdCalibradora(int idCalibradora) {
            this.idCalibradora = idCalibradora;
        }
    

    public int getCdAlmacen() {
    return cdAlmacen;
    }

    public void setCdAlmacen(int cdAlmacen) {
    this.cdAlmacen = cdAlmacen;
    }

    @Column(name = "cd_almacen")
    private int cdAlmacen;

    @Override
    public int hashCode() { // Ha de definir el método hashCode
    return toString().hashCode();
    }

    @Override
    public String toString() {
    return "CalibradosPK::" + idCalibradora + ":" + cdAlmacen;
    }
    }

    El problema es que cuando quiero ver el listado de la primera entidad en lugar de usar el nombre de columna que le indico en el joincolumn me da el siguiente error
    org.postgresql.util.PSQLException: ERROR: no existe la columna cab_calibrados.calibradora_id_calibradora
    parece que concatenara el nombre de la propiedad con el nombre que le doy en la JoinColumn.
    Estoy bloquedado con esto. Agradezco cualquier pista.

    Saludos

     
  • Javier Paniza
    Javier Paniza
    2012-03-08

    Hola Arturo,

    creo que los @JoinColumn deberían ser así:

    @JoinColumns({ 
            @JoinColumn(name="id_calibradora", referencedColumnName="id_calibradora"),
            @JoinColumn(name="cd_almacen", referencedColumnName="cd_almacen")
        })
    

    Porque referencedColumnName ha de ser un nombre de columna, no de propiedad.

    -------
    Ayuda a otros en esto foro como yo te ayudo a ti
    y no olvides leer el libro de OpenXava.