Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con JPA y claves externas multiatributo

Estas en el tema de Problema con JPA y claves externas multiatributo en el foro de Java en Foros del Web. Hola, estoy utilizando NetBeans para generar automáticamente "Entity Classes from Database...". En general me genera perfectamente las clases pero tengo una tabla que tiene como ...
  #1 (permalink)  
Antiguo 11/01/2009, 11:20
 
Fecha de Ingreso: enero-2009
Mensajes: 1
Antigüedad: 15 años, 3 meses
Puntos: 0
Pregunta Problema con JPA y claves externas multiatributo

Hola, estoy utilizando NetBeans para generar automáticamente "Entity Classes from Database...". En general me genera perfectamente las clases pero tengo una tabla que tiene como clave foranea tres atributos. Algo tal que así:

Código:
ALTER TABLE Capital ADD FOREIGN KEY (`Jugador`, `Ciudad`, `Turno`) REFERENCES
`Propietario` (`Jugador`, `Ciudad`, `Turno`) ON UPDATE CASCADE;
Me genera perfectamente la clase Capital (con su CapitalPK incluida). El problema es que a la hora de ejecutar, cuando intenta crear el EntityManager el programa lanza una excepción y la descripción que da de ella es la siguiente:

Código:
Exception Description: The @JoinColumns on the annotated element
[private modelo.Propietario modelo.Capital.propietario] from the entity class
[class modelo.Capital] is incomplete. When the source entity class uses a
composite primary key, a @JoinColumn must be specified for each join column
using the @JoinColumns. Both the name and the referenceColumnName elements
must be specified in each such @JoinColumn.
Mis clases Capital y Propietario son las siguientes:

Código:
@Entity
@Table(name = "Capital")
@NamedQueries({@NamedQuery(name = "Capital.findAll", query = "SELECT c FROM Capital c"), @NamedQuery(name = "Capital.findByJugador", query = "SELECT c FROM Capital c WHERE c.capitalPK.jugador = :jugador"), @NamedQuery(name = "Capital.findByTurno", query = "SELECT c FROM Capital c WHERE c.capitalPK.turno = :turno")})
public class Capital implements Serializable {

    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected CapitalPK capitalPK;
    @JoinColumns({@JoinColumn(name = "Jugador", referencedColumnName = "Jugador", insertable = false, updatable = false), @JoinColumn(name = "Ciudad", referencedColumnName = "Ciudad"), @JoinColumn(name = "Turno", referencedColumnName = "Turno", insertable = false, updatable = false)})
    @ManyToOne(optional = false)
    private Propietario propietario;
}
Código:
@Entity
@Table(name = "Propietario")
@NamedQueries({@NamedQuery(name = "Propietario.findAll", query = "SELECT p FROM Propietario p"), @NamedQuery(name = "Propietario.findByCiudad", query = "SELECT p FROM Propietario p WHERE p.propietarioPK.ciudad = :ciudad"), @NamedQuery(name = "Propietario.findByTurno", query = "SELECT p FROM Propietario p WHERE p.propietarioPK.turno = :turno")})
public class Propietario implements Serializable {

    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected PropietarioPK propietarioPK;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "propietario")
    private Collection<Capital> capitalCollection;
    @JoinColumn(name = "Jugador", referencedColumnName = "Nick")
    @ManyToOne(optional = false)
    private Jugadores jugador;
    @JoinColumn(name = "Ciudad", referencedColumnName = "Nombre", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Ciudades ciudades;
    @JoinColumn(name = "Turno", referencedColumnName = "Turno", insertable = false, updatable = false)
    @ManyToOne(optional = false)
    private Turnos turnos;
}
¿Alguien detecta el error? La verdad no estoy muy experimentado en los Beans...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:45.