У меня проблема, когда я делаю запрос к своему репо с Page page = entityRepository.findAll (pageable).Итак, я не знаю, почему, когда hibernate строит запрос, он делает это как asignatura_id и profesor_id в сущности asignaturaProfesor, если его id является объектом из сущности AsignaturaProfesorId, а это поля id_profesor и id_asignatura
Я получаю эту ошибку:
Hibernate: выберите profesor0_.id в качестве id1_8_, profesor0_.categoria в качестве категорий_2_, profesor0_.cod_profesor в качестве cod_prof3_8_, profesor0_.email в качестве email4_8_, prof_se_0_0_0_0_0_0_0_0_0_0_0_0_0_0_7.num_creditos_impartir в num_cred7_8_, profesor0_.primer_apellido как primer_a8_8_, profesor0_.prioridad как priorida9_8_, profesor0_.segundo_apellido как segundo10_8_, profesor0_.usu_alta как usu_alt11_8_ от Profesor profesor0_
1007 *
> Hibernate: выберите asignatura0_.profesor_id в profesor4_1_0_,asignatura0_.fecha_seleccion as fecha_se1_1_0_, asignatura0_.asignatura_id as asignatu3_1_0_, asignatura0_.fecha_seleccion as fecha_se1_1_1_, asignatura0_.asignatura_id asignatu3_1_1_, asignatura0_.profesor_id в качестве profesor4_1_1_, asignatura0_.num_creditos в виде num_cred2_1_1_ из asignatura_profesor asignatura0_, где asignatura0_.profesor_id =? * 1001. * 0.91-й.SqlExceptionHelper: Ошибка SQL: 1054, SQLState: 42S22 ОШИБКА 19148 --- [XNIO-2 task-8] ohengine.jdbc.spi.SqlExceptionHelper: Неизвестный столбец 'asignatura0_.profesor_id' в 'списке полей'
Это моя схема базы данных:
CREATE TABLE asignatura_profesor (
id_profesor bigint(20) NOT NULL,
id_asignatura bigint(20) NOT NULL,
fecha_seleccion timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
num_creditos bigint(20) NOT NULL,
PRIMARY KEY (id_asignatura,id_profesor,fecha_seleccion),
KEY FK_PROFESORES_ASIGNATURA_PROFESORES_01 (id_profesor),
CONSTRAINT FK_PROFESORES_ASIGNATURA_ASIGNATURAS_02 FOREIGN KEY (id_asignatura) REFERENCES asignatura (id),
CONSTRAINT FK_PROFESORES_ASIGNATURA_PROFESORES_01 FOREIGN KEY (id_profesor) REFERENCES profesor (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE profesor (
id bigint(20) NOT NULL AUTO_INCREMENT,
nombre varchar(255) NOT NULL,
primer_apellido varchar(255) NOT NULL,
segundo_apellido varchar(255) NOT NULL,
cod_profesor int(11) NOT NULL,
email varchar(255) NOT NULL,
categoria` varchar(255) NOT NULL,
num_creditos_impartir int(11) DEFAULT NULL,
prioridad int(11) NOT NULL,
usu_alta varchar(255) NOT NULL,
login varchar(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
CREATE TABLE asignatura (
id bigint(20) NOT NULL AUTO_INCREMENT,
nombre varchar(255) NOT NULL,
plan varchar(255) NOT NULL,
titulacion varchar(255) NOT NULL,
creditos int(11) NOT NULL,
num_grupos int(11) DEFAULT NULL,
creditos_teoricos int(11) NOT NULL,
creditos_practicas int(11) NOT NULL,
num_grupos_teoricos int(11) DEFAULT NULL,
num_grupos_practicas int(11) DEFAULT NULL,
usu_alta varchar(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
Это мой код:
Profesor.java
@Entity
@Table(name = "profesor")
public class Profesor implements Serializable , Comparable<Profesor>{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "nombre", nullable = false)
private String nombre;
@NotNull
@Column(name = "primer_apellido", nullable = false)
private String primerApellido;
@NotNull
@Column(name = "segundo_apellido", nullable = false)
private String segundoApellido;
@NotNull
@Max(value = 3)
@Column(name = "cod_profesor", nullable = false)
private Integer codProfesor;
@NotNull
@Column(name = "email", nullable = false)
private String email;
@NotNull
@Column(name = "categoria", nullable = false)
private String categoria;
@Column(name = "num_creditos_impartir")
private Integer numCreditosImpartir;
@NotNull
@Max(value = 2)
@Column(name = "prioridad", nullable = false)
private Integer prioridad;
@NotNull
@Column(name = "usu_alta", nullable = false)
private String usuAlta;
@OneToMany(
mappedBy = "profesor",
cascade = CascadeType.ALL,
fetch=FetchType.EAGER,
orphanRemoval = true
)
private List<AsignaturaProfesor> asignaturas = new ArrayList<>();
@NotNull
@Column(name = "login", nullable = false)
private String login;
public Profesor() {}
public List<AsignaturaProfesor> getAsignaturas() {
return asignaturas;
}
public void setAsignaturas(List<AsignaturaProfesor> asignaturas) {
this.asignaturas = asignaturas;
}
//GETTER AND SETTERS
public void addAsignatura(Asignatura asignatura, long num_creditos_seleccion ) {
AsignaturaProfesor asignaturaProfesor = new AsignaturaProfesor(this, asignatura, num_creditos_seleccion);
asignaturas.add(asignaturaProfesor);
asignatura.getProfesors().add(asignaturaProfesor);
}
public void removeAsignatura(Asignatura asignatura) {
for (Iterator<AsignaturaProfesor> iterator = asignaturas.iterator();
iterator.hasNext(); ) {
AsignaturaProfesor asignaturaProfesor = iterator.next();
if (asignaturaProfesor.getProfesor().equals(this) &&
asignaturaProfesor.getAsignatura().equals(asignatura)) {
iterator.remove();
asignaturaProfesor.getAsignatura().getProfesors().remove(asignaturaProfesor);
asignaturaProfesor.setProfesor(null);
asignaturaProfesor.setAsignatura(null);
}
}
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Profesor profesor = (Profesor) o;
if (profesor.id == null || id == null) {
return false;
}
return Objects.equals(id, profesor.id);
}
@Override
public int hashCode() {
return Objects.hashCode(id);
}
public int compareTo(Profesor o) {
if (prioridad < o.prioridad) {
return -1;
}
if (prioridad > o.prioridad) {
return 1;
}
return 0;
}
}
AsignaturaProfesorId.java
@Entity
@Table(name="asignatura_profesor")
public class AsignaturaProfesor implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
public AsignaturaProfesorId profasigpk;
@NotNull
@Column (name = "num_creditos")
private Long num_creditos;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("id_profesor")
private Profesor profesor;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("id_asignatura")
private Asignatura asignatura;
public AsignaturaProfesor() {
}
public AsignaturaProfesor(AsignaturaProfesorId profAsigpk, Long num_creditos) {
this.profasigpk = profAsigpk;
this.num_creditos = num_creditos;
}
public AsignaturaProfesor(Profesor profesor, Asignatura asignatura, long num_creditos){
this.profesor = profesor;
this.asignatura = asignatura;
this.num_creditos = num_creditos;
}
//GETTER AND SETTER
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass())
return false;
AsignaturaProfesor that = (AsignaturaProfesor) o;
return Objects.equals(profesor, that.asignatura) &&
Objects.equals(asignatura, that.profesor);
}
@Override
public int hashCode() {
return Objects.hash(profesor, asignatura);
}
@Override
public String toString() {
return "AsignaturaProfesor{" +
"profAsigpk=" + profasigpk +
'}';
}
}
ProfesorAsignatura.java
@Entity
@Table(name="asignatura_profesor")
public class AsignaturaProfesor implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
public AsignaturaProfesorId profasigpk;
@NotNull
@Column (name = "num_creditos")
private Long num_creditos;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("id_profesor")
private Profesor profesor;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("id_asignatura")
private Asignatura asignatura;
public AsignaturaProfesor() {
}
public AsignaturaProfesor(AsignaturaProfesorId profAsigpk, Long num_creditos) {
this.profasigpk = profAsigpk;
this.num_creditos = num_creditos;
}
public AsignaturaProfesor(Profesor profesor, Asignatura asignatura, long num_creditos){
this.profesor = profesor;
this.asignatura = asignatura;
this.num_creditos = num_creditos;
}
public AsignaturaProfesorId getProfAsigpk() {
return profasigpk;
}
public void setProfAsigpk(AsignaturaProfesorId profAsigpk) {
this.profasigpk = profAsigpk;
}
public Long getNum_creditos() {
return num_creditos;
}
public void setNum_creditos(Long num_creditos) {
this.num_creditos = num_creditos;
}
public Profesor getProfesor() {
return profesor;
}
public void setProfesor(Profesor profesor) {
this.profesor = profesor;
}
public Asignatura getAsignatura() {
return asignatura;
}
public void setAsignatura(Asignatura asignatura) {
this.asignatura = asignatura;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass())
return false;
AsignaturaProfesor that = (AsignaturaProfesor) o;
return Objects.equals(profesor, that.asignatura) &&
Objects.equals(asignatura, that.profesor);
}
@Override
public int hashCode() {
return Objects.hash(profesor, asignatura);
}
@Override
public String toString() {
return "AsignaturaProfesor{" +
"profAsigpk=" + profasigpk +
'}';
}
спасибо, если кто-то может мне помочь.