Problème avec la méthode personnalisée dans CRUDrepository (démarrage du printemps)

BACA:

Je suis en train de faire une application web pour une petite école de conduite à l'aide de démarrage au printemps. A ce moment, je suis en train de créer les tables qui utilise des clés étrangères: un étudiant aura plusieurs évaluations, donc je fais un 1: association N. Le problème est, lorsque je tente de lancer le projet pour le test, j'obtiens cette erreur (ne va mettre la cause):

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property rut found for type ResultadosPsicotecnicos!

Je l'ai fait une méthode personnalisée pour aller chercher toutes les évaluations d'un étudiant, mais pour une raison quelconque, il ne fonctionne pas. Je regardais dans la base de données pour voir si la colonne a été effectivement créé et voici le code que j'ai vu:

-- Table: public.resultados_psicotecnicos

-- DROP TABLE public.resultados_psicotecnicos;

CREATE TABLE public.resultados_psicotecnicos
(
    id bigint NOT NULL,
    fecha_evaluacion character varying(255) COLLATE pg_catalog."default",
    nota1 character varying(255) COLLATE pg_catalog."default",
    nota2 character varying(255) COLLATE pg_catalog."default",
    nota3 character varying(255) COLLATE pg_catalog."default",
    nota4 character varying(255) COLLATE pg_catalog."default",
    rut bigint NOT NULL,
    CONSTRAINT resultados_psicotecnicos_pkey PRIMARY KEY (id),
    CONSTRAINT fkf57g1daekqxergtw9kck81esq FOREIGN KEY (rut)
        REFERENCES public.students (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)

TABLESPACE pg_default;

ALTER TABLE public.resultados_psicotecnicos
    OWNER to postgres;

Je suis un peu nouveau dans ce cadre, alors peut-être l'erreur est évidente, mais je ne le vois pas. Maintenant, je vais vous montrer les classes et les dépôts.

Ceci est la structure du projet:

entrez la description d'image ici

application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=password
spring.jpa.show-sql=true
spring.datasource.driver-class-name=org.postgresql.Driver

## Hibernate Propierties
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL94Dialect

# Hibernate auto ddls
spring.jpa.hibernate.ddl-auto = create

Student.java

package net.BBB.ProjectB.entity;


import java.sql.Date;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "students")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @NotBlank(message = "Este campo es obligatorio")
    @Column(name = "nombre")
    private String nombre;

    @NotBlank(message = "Este campo es obligatorio")
    @Column(name = "nacionalidad")
    private String nacionalidad;

    @NotNull(message = "Este campo es obligatorio")
    @Column(name = "edad")
    private long edad;

    @NotBlank(message = "Este campo es obligatorio")
    @Column(name = "rut")
    private String rut;

    @NotBlank(message = "Este campo es obligatorio")
    @Column(name = "sexo")
    private String sexo;

    @NotNull(message = "Este campo es obligatorio")
    @Column(name = "fecha_nacimiento")
    private Date fecha_nacimiento;

    @NotBlank(message = "Este campo es obligatorio")
    @Column(name = "domicilio")
    private String domicilio;

    @NotBlank(message = "Este campo es obligatorio")
    @Column(name = "email")
    private String email;

    @NotNull(message = "Este campo es obligatorio")
    @Column(name = "telefono")
    private long telefono;

    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
    private Set<ResultadosPsicotecnicos> resultadosPsicotecnicos;

   /* constructors, getters and setters ommited */

Ne pas confondre ruten étudiant avec celui ResultadosPsicotecnicos.

ResultadosPsicotecnicos.java

package net.BBB.ProjectB.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "Resultados_Psicotecnicos")
public class ResultadosPsicotecnicos {

    @Id
    @Column(name = "id")
    private long id;

    @ManyToOne
    @JoinColumn(name = "rut", nullable = false, referencedColumnName = "id")
    private Student student;

    private String fecha_evaluacion;

    private String nota1;

    private String nota2;

    private String nota3;

    private String nota4;

    public ResultadosPsicotecnicos() {}

    public ResultadosPsicotecnicos(Student student) {
        this.student = student;
    }

    /* getters and setters ommited */

ResultadosPsicotecnicosRepository.java

package net.BBB.ProjectB.repository;

import java.util.List;

import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.EntityGraph.EntityGraphType;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import net.BBB.ProjectB.entity.ResultadosPsicotecnicos;

@Repository
public interface ResultadosPsicotecnicosRepository extends CrudRepository<ResultadosPsicotecnicos, Long> {

    @EntityGraph(value = "Student.resultadosPsicotecnicos", type = EntityGraphType.FETCH)
    List<ResultadosPsicotecnicos> findByRut(long rut);

}

Ici , à la fin est la méthode personnalisée qui provoque des erreurs. Je vais utiliser idde l'étudiant au moment, plus tard si je résoudre ce problème je vais utiliser le rut, mais pour l' instant la colonne de la clé étrangère est appelée rutet elle utilise le idde l' étudiant.

Toute aide est la bienvenue.

Sandeep:

En fait, l'Assemblée parlementaire paritaire essaie de trouver ornière colonne ResultadosPsicotecnicos que vous avez spécifié dans findByRut ResultadosPsicotecnicosRepository.

  1. Modifier le findByRut dans ResultadosPsicotecnicosRepository comme ci-dessous parce que vous devez spécifier le nom de l'objet de votre entité dans le dépôt JPA et non le nom de colonne db Liste findByStudent_id (longue StudentID);

  2. Vous pouvez essayer la solution ci-dessous. Pour obtenir la liste des ResultadosPsicotecnicos pour un élève en particulier, vous devez ajouter la méthode ci-dessous dans StudentRepository

@EntityGraph (valeur = "Student.resultadosPsicotecnicos", type = EntityGraphType.FETCH) Student findById (longue id); et sur le dessus de votre classe d'étudiant, s'il vous plaît ajouter la ligne ci-dessous @NamedEntityGraph (name = "Student.resultadosPsicotecnicos", attributeNodes = {@NamedAttributeNode ( "resultadosPsicotecnicos")})

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=344057&siteId=1
conseillé
Classement