αδρανοποίησης δεν χτίσει ερώτημα σωστά

ψήφοι
0

Έχω ένα πρόβλημα, όταν κάνω ένα ερώτημα για να repo μου με Σελίδα = entityRepository.findAll (pageable). Έτσι, δεν ξέρω γιατί, όταν αδρανοποίησης χτίσει το ερώτημα αυτό να το κάνει, όπως asignatura_id και profesor_id στην οντότητα asignaturaProfesor αν id του είναι ένα αντικείμενο από AsignaturaProfesorId οντότητα και αυτό το πεδία είναι id_profesor και id_asignatura

Παίρνω αυτό το σφάλμα:

Αδρανοποίηση: επιλέξτε profesor0_.id ως id1_8_, profesor0_.categoria όπως categori2_8_, profesor0_.cod_profesor όπως cod_prof3_8_, profesor0_.email όπως email4_8_, profesor0_.login όπως login5_8_, profesor0_.nombre όπως nombre6_8_, profesor0_.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_

> Αδρανοποίηση: επιλέξτε asignatura0_.profesor_id ως profesor4_1_0_, asignatura0_.fecha_seleccion όπως fecha_se1_1_0_, asignatura0_.asignatura_id όπως asignatu3_1_0_, asignatura0_.fecha_seleccion όπως 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 =;

WARN 19148 --- [XNIO-2 καθήκον-8] ohengine.jdbc.spi.SqlExceptionHelper: SQL Σφάλμα: 1054, SQLState: 42S22 ΣΦΑΛΜΑ 19148 --- [XNIO-2 καθήκον-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 +
        '}';
} 

χάρη, αν κάποιος μπορεί να με βοηθήσει.

Δημοσιεύθηκε 20/10/2018 στις 12:40
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Τώρα, ο κώδικας runing με την απάντηση @codeLover τροποποιημένο σαν να σχολιάσω στην απάντησή του, αλλά αν μπορώ να ορίσω φέρω = FetchType.EAGER για Profesor.java πάρω StackOverflowError και αν μπορώ να ορίσω φέρω = FetchType.LAZY τότε μπορώ
Page<Profesor> page = profesorRepository.findAll(pageable); να πάρω όλα αυτά χωρίς asignaturas Κατάλογος μελών που έχουν κάθε profesor. Έτσι, δεν ξέρω πώς μπορώ να πάρετε όλα τα profesors με όλα τα χωράφια τους περιλαμβάνουν κατάλογο asignaturas από τον καθένα

Profesor.java

@OneToMany(
mappedBy = "profesor",
cascade = CascadeType.ALL,
fetch=FetchType.EAGER,
orphanRemoval = true
)
private List<AsignaturaProfesor> asignaturas = new ArrayList<>();
Απαντήθηκε 21/10/2018 στις 00:50
πηγή χρήστη

ψήφοι
0

Αυτό οφείλεται στο γεγονός ότι, ενώ προσδιορίζει @ManyToOneτη σχέση σας δεν παραπέμπουν τα ονόματα των στηλών που δρουν ως ξένο κλειδί, ως εκ τούτου, αδρανοποίησης αναλαμβάνει το όνομα του ξένου κλειδιού σύμφωνα με τη Σύμβαση της, έτσι, είστε αντιμέτωποι με αυτό το θέμα. Δοκιμάστε αυτό:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(referencedColumnName = "id",name = "id_profesor", insertable=false, updatable=false)
private Profesor profesor;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(referencedColumnName = "id",name = "id_asignatura", insertable=false, updatable=false)
private Asignatura asignatura;
Απαντήθηκε 20/10/2018 στις 13:15
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more