Tengo una relación entre las clases de Accommodation y Booking , y también establecí una clave externa en la tabla de reserva.
ALTER TABLE `project`.`booking` ADD INDEX `fk_accId_fk_idx` (`accommodation` ASC); ALTER TABLE `project`.`booking` ADD CONSTRAINT `fk_accId_fk` FOREIGN KEY (`accommodation`) REFERENCES `project`.`accommodation` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;Clase de alojamiento:
@Entity .... public class Accommodation implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", unique = true, nullable = false) private BigInteger id; @OneToMany(mappedBy = "accommodation", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE) @JsonManagedReference private List < Booking > bookings; ......getters setters }Clase de reserva:
@Entity public class Booking implements Serializable { ...... @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "bookings", nullable = true) @JsonBackReference private Accommodation accommodation; ....getters setters }Cuando ejecuto una consulta para enumerar alojamientos, aparece un error de columna desconocida en la lista de campos.
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: no se pudo extraer ResultSet] con causa raíz com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: columna desconocida 'bookings7_.bookings' en 'field list'
Incluso establecí la relación y definí la clave externa en la tabla, ¿cuál es la razón por la que recibo este error?
Intente definir su mapeo de tablas de unión manualmente en JPA. Suelta tu esquema y deja que JPA cree tus tablas:
clase de alojamiento
@OneToMany(mappedBy = "accommodation", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE) @JsonManagedReference private List < Booking > bookings;clase de reserva
@ManyToOne(fetch = FetchType.EAGER) @JoinTable(name = "accommodation_booking_join_table", joinColumns = {@JoinColumn(name="booking_id")}, inverseJoinColumns = @JoinColumn(name = "accommodation_id")) @JsonBackReference private Accommodation accommodation;Intente cambiar los nombres de sus columnas a minúsculas en su base de datos y clase de entidad.
Tuve una situación como esa y la resolví cambiando la posición del campo en la consulta. Parece que es un error de MySQL, como (o el mismo que) el mencionado en esta publicación:
https://bugs.mysql.com/bug.php?id=1689
La descripción de este error de MySQL mencionaba una solución alternativa similar: "Descubrí que al intercambiar la posición de ese campo en la tabla con otro campo funcionaba bien".