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; }