
11/01/2009, 11:20
|
| | Fecha de Ingreso: enero-2009
Mensajes: 1
Antigüedad: 16 años, 2 meses Puntos: 0 | |
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... |