Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331

    (Spring + JPA) problemi con le join

    Ciao, sto cercando di impratichirmi con Spring e mi sto facendo un'applicazione di prova per conto mio.
    Ho però dei problemi con alcune query.

    Ho creato queste due entities

    codice:
    package myproject.soccerpredictor.model;
    
    
    import jakarta.persistence.*;
    import lombok.*;
    
    
    import javax.validation.constraints.NotNull;
    
    
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    
    import java.math.BigInteger;
    import java.util.Objects;
    
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    @Setter
    @Entity
    @Table(name="campionati")
    public class Campionato {
    	
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	@Column(name="id", columnDefinition="BIGINT(10) UNSIGNED")
    	@JsonProperty(value = "id")
    	private BigInteger id;
    	
    	@NotNull
        @Column(name="nome")
        @JsonProperty(value = "nome")
    	private String nome;
    	
    	@NotNull
        @Column(name="nazione")
        @JsonProperty(value = "nazione")
    	private String nazione;
    }
    e

    codice:
    package myproject.soccerpredictor.model;
    
    
    import java.math.BigInteger;
    
    
    import javax.validation.constraints.NotNull;
    
    
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    
    import jakarta.persistence.Column;
    import jakarta.persistence.Entity;
    import jakarta.persistence.GeneratedValue;
    import jakarta.persistence.GenerationType;
    import jakarta.persistence.Id;
    import jakarta.persistence.JoinColumn;
    import jakarta.persistence.ManyToOne;
    import jakarta.persistence.Table;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.Getter;
    import lombok.NoArgsConstructor;
    import lombok.Setter;
    
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    @Setter
    @Entity
    @Table(name="squadre")
    public class Squadra {
    	
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	@Column(name="id", columnDefinition="BIGINT(10) UNSIGNED")
    	@JsonProperty(value = "id")
    	private BigInteger id;
    	
    	@ManyToOne
        @JoinColumn(name = "id_campionato", nullable = false)
        @JsonProperty(value = "campionato")
        private Campionato idCampionato;
    	
    	@NotNull
        @Column(name="nome")
        @JsonProperty(value = "nome")
    	private String nome;
    	
    	@NotNull
        @Column(name="punti")
        @JsonProperty(value = "punti")
    	private BigInteger punti;
    	
    	@NotNull
        @Column(name="differenza_reti")
        @JsonProperty(value = "differenza_reti")
    	private BigInteger diffReti;
    	
    	@NotNull
        @Column(name="goal_fatti")
        @JsonProperty(value = "goal_fatti")
    	private BigInteger goalFatti;
    	
    	@NotNull
        @Column(name="goal_subiti")
        @JsonProperty(value = "goal_subiti")
    	private BigInteger goalSubiti;
    }
    
    e ho definito questa interface per le query

    codice:
    package myproject.soccerpredictor.repository;
    
    
    import java.math.BigInteger;
    import java.util.List;
    
    
    import org.springframework.data.jdbc.repository.query.Query;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.repository.query.Param;
    
    
    import myproject.soccerpredictor.model.Squadra;
    
    
    public interface SquadraRepository extends JpaRepository<Squadra, BigInteger> {
    	
    	@Query("SELECT u FROM Squadra u JOIN FETCH u.idCampionato WHERE u.id = :id")
        Squadra findSquadraById(@Param("id") BigInteger id);
    	
    	@Query("SELECT u FROM Squadra u JOIN FETCH u.idCampionato c WHERE u.nome = :nome")
        Squadra findSquadraByNome(@Param("nome") String nome);
    	
    	@Query("SELECT u FROM Squadra u WHERE u.idCampionato.id = :idCampionato")
        List<Squadra> findSquadreByCampionato(@Param("idCampionato") BigInteger id);
    
    
    }
    
    Dopo aver aggiunto l'ultima query quando avvio il modulo da Eclipse ottengo questo errore sullo startup

    org.springframework.beans.factory.UnsatisfiedDepen dencyException: Error creating bean with name 'squadraController': Unsatisfied dependency expressed through field 'squadraService': Error creating bean with name 'squadraServiceImpl': Unsatisfied dependency expressed through field 'squadraRepository': Error creating bean with name 'squadraRepository' defined in myproject.soccerpredictor.repository.SquadraReposi tory defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConf iguration: Could not create query for public abstract java.util.List myproject.soccerpredictor.repository.SquadraReposi tory.findSquadraByCampionato(java.math.BigInteger) ; Reason: Failed to create query for method public abstract java.util.List myproject.soccerpredictor.repository.SquadraReposi tory.findSquadraByCampionato(java.math.BigInteger) ; No property 'campionato' found for type 'Squadra'



    Esattamente cosa sto sbagliando?
    Grazie in anticipo a chi risponderà

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dovrei provare, ma in prima battuta credo che a Spring non vada bene il nome del metodo: findSquadreByCampionato. Prova a modificarlo in "findSquadreByIdCampionato".

    Spring cerca di interpretare il nome del metodo per costruire automaticamente la query, quindi ti sta dicendo che sta provando a costruire una query per cercare le squadre per "campionato", property che non esiste nell'entity Squadra.

    In teoria non dovrebbe utilizzare il meccanismo di generazione automatica poichè tu hai specificato l'annotation @Query, ma tant'è... vai a sapere cosa cerca di fare Spring.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.