Código:
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:ALTER TABLE Capital ADD FOREIGN KEY (`Jugador`, `Ciudad`, `Turno`) REFERENCES `Propietario` (`Jugador`, `Ciudad`, `Turno`) ON UPDATE CASCADE;
Código:
Mis clases Capital y Propietario son las siguientes: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.
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:
¿Alguien detecta el error? La verdad no estoy muy experimentado en los Beans... @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;
}

